Spring
一.IOC-进阶
1. 进阶案例1:面向接口编程
Dao、service先定义接口,再定义接口的实现类
为什么要用面向接口编程: 维护和扩展功能更方便
接口中暂不书写任何注解
service类:
@Component("demo1ServiceImpl")
public class Demo1ServiceImpl implements Demo1Service {
@Resource(name="demo1DaoImpl")
private Demo1Dao demo1Dao;
}
测试类:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {SpringConfiguration.class})
public class Demo1Test {
@Resource(name="demo1ServiceImpl")
private Demo1Service demo1Service;
@Test
public void run1(){
System.out.println(demo1Service);
}
}
2. 进阶案例2:衍生注解
@Component:通用的注册组件的注解。
通过该注解,可以向spring注册组件
适用于:普通类(非Dao、非Service、非web层)
@Repository:专门注册Dao层的注解。
@Service:专门注册Service层的注解。
进阶总结+异常总结
- SpringConfiguration类注解:
-
注解
描述
@Configuration
用于标明当前类是一个Spring配置类。
@ComponentScan
用于自动扫描某个包下的注册组件。
(扫描所有的@Component等注解修饰的类)
格式:@ComponentScan(basePackages={"包名1","包名2"})
说明:会自动扫描包名1及包名2下所有的注册组件
扫描的注解包括:@Component、@Repository、@Service、@Controller
- 注册组件注解:
-
注解
描述
@Component
用于注册组件。
将当前类注册,交给spring管理。
注意:注册名不能重复,否则报错。
格式:@Component("注册名")
@Repository
专业用于Dao组件注册,用于替换Dao类上的@Component
格式:@Repository("注册名")
@Service
专业用于Service组件注册,用于替换Service类上的@Component
格式:@Service("注册名")
@Controller
专业用于Servlet组件注册,用于替换Servlet类上的@Component
格式:@Controller("注册名")
- 注入实例对象注解:
-
注解
描述
@Resource
用于使用已注册组件创建实例对象,并注入到此处修饰的变量中
注意:name必须和之前的注册名保持一致,否则报错
格式:@Resource(name="注册名/组件名")
注意事项!!!!=============>>>>>>
如果@Service注册组件时,未赋予组件名。
@Resource有几种常见写法?
@Resource(name=”类名小驼峰式”)
@Resource 前提:该组件只能找到一个对象
- 测试类注解:
注解 |
描述 |
@RunWith |
告诉程序如何运行代码。 固定结构: @RunWith(SpringJUnit4ClassRunner.class) 代码使用spring自带的junit4测试 |
@ContextConfiguration |
向spring工厂加载配置类,并开始使用spring管理对象 固定结构: @ContextConfiguration(classes={SpringConfiguration.class}) |
-
可能出现的问题:
今日小结:
面向接口编程:为了维护和扩展功能的方便。
@Component----
----@Repository
----@Service
修饰类,把某个Java类管理对象的权利交给了spring。
依赖注入:
接口/实现类 类型的成员变量:@Resource
按名称:@Resource(name=”组件名”)
按类型:@Resource
前提:该类型的对象在spring容器中只能存在1个
未完待续!!!
当然,后面还有更nice的,下篇给你更!!!
记得要留意关注,可别错过了噢!
请给努力中的自己点个赞哦!
每天进步一点点`~~~~~
来源:oschina
链接:https://my.oschina.net/ithuang/blog/4254610