一、Autowired关键字的使用场景
- 构造函数(效率高)
@Component
public class CDPlayer {
/* @Autowired
public CDPlayer(CompactDisc cd) {
this.cd = cd;
}*/
}
- 成员变量(最便捷)
@Autowired
private SearchFilterHandleService searchFilterHandleService;
- setter方法
@Autowired
public void setCd(CompactDisc cd) {
this.cd = cd;
}
- 任意方法
@Autowired
public void getTest(CompactDisc cd){
this.cd = cd;
}
二、required关键字@Autowired(required=false)
表示注入的对象时可选的
- 默认required=true
- 当某些业务场景下,某些类一开始是不需要被创建(注入),因此需要加上required=false,表明注入对象是不可选的
三、使用接口interface
场景一、在方法调用中注入类时,建议注入接口,调用时直接调用实现了接口类的具体方法
四、自动装配的歧义性
从使用接口interface中发现,如果多个类都实现了同一个接口,那么在调用时就会出现不知道调用哪个具体实现类的方法,因此要消除这种歧义性,见如下方式:
- 首选bean @Primary -- 只能用于一个实现类,不够扩展
- 限定符 -- 相当于给实现类起个别名,在实际的调用中指定相应的别名
-
bean id
- component("XX")
- 什么都不加,默认小写类名就是id,在装配的时候使用@Qualifier(类名的首写字母小写)
- Resource注解
Resource可代替Autowired和Qualifier,但这2个标签是spring标准,Resouce是jdk标准
/* @Autowired
@Qualifier("userServiceVip")*/
@Resource(name="userServiceVip")
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。