用一句话描述Autowired的作用就是,在ioc容器中找到并装配需要的组件。
Autowired功能相似@Resource和@Inject都有什么相似与不同呢?在下面给大家一一揭晓
@Autowired 如何找到需要的组件
- 默认使用类型去找,例如
applicationContext.getBean(Dao.class)
- 如果找到多个,再把名称当作id去找,所以这里注入的名字一般不要乱写,例如
@Autowired
Dao dao;
applicationContext.getBean(dao);
- 当然也可以和@Qualifier(“dao1”)搭配使用,这样就指定了需要加载的bean的id。
@Qualifier("dao1")
@Autowired
Dao dao;
- 自动装配默认一定要把属性值装配好,如果找不到某个属性组件,就会报错;但是也可以给autowired的属性值设置为false;
@Autowired(required=false)
Dao dao;
5.如果出现多个相同的bean时,也可以使用@Primary来指定一个首选的bean装载。其余的可以使用@Qualifier去指定具体的id。
@Autowired 是如何实现装配的
它是由与bean的后置处理器完成装配的,即AutowiredAnnotationBeanPostProcessor,在之前介绍组件注册时已经介绍过后置处理器相关原理,感兴趣的童鞋可以自己去看下源码。
与@Resource、@Inject的区别和联系
- @Resource是JSR250提供的自动注入的方式,也就会说它是java规范提供,用法与@Autowired相差较多,它不能与primary和qualifier注解配合使用,也没有Autowired的required属性,只有一个与value属性类似的name属性,可以指定bean的id。
- @Inject是JSR330提供的,它的功能和@Autowired基本一致,但是没有required属性。
- 综合以上两种注解与@Autowired的对比,还是spring比较强大。。。。。