转载

SpringFramework基础的学习和实践_第二课

一、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)

表示注入的对象时可选的
  1. 默认required=true
  2. 当某些业务场景下,某些类一开始是不需要被创建(注入),因此需要加上required=false,表明注入对象是不可选的

三、使用接口interface

场景一、在方法调用中注入类时,建议注入接口,调用时直接调用实现了接口类的具体方法

SpringFramework基础的学习和实践_第二课

四、自动装配的歧义性

从使用接口interface中发现,如果多个类都实现了同一个接口,那么在调用时就会出现不知道调用哪个具体实现类的方法,因此要消除这种歧义性,见如下方式:

  1. 首选bean @Primary -- 只能用于一个实现类,不够扩展
  2. 限定符 -- 相当于给实现类起个别名,在实际的调用中指定相应的别名
  3. bean id

    1. component("XX")
    2. 什么都不加,默认小写类名就是id,在装配的时候使用@Qualifier(类名的首写字母小写)
  4. Resource注解
    Resource可代替Autowired和Qualifier,但这2个标签是spring标准,Resouce是jdk标准
/*   @Autowired
    @Qualifier("userServiceVip")*/
    @Resource(name="userServiceVip")
原文  https://segmentfault.com/a/1190000022589143
正文到此结束
Loading...