您的位置:首页 > 编程语言 > Java开发

spring注解驱动开发--自动装配之找bean

2019-07-07 14:14 585 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/shui_1234/article/details/94985828
用一句话描述Autowired的作用就是,在ioc容器中找到并装配需要的组件。
Autowired功能相似@Resource和@Inject都有什么相似与不同呢?在下面给大家一一揭晓

@Autowired 如何找到需要的组件

  1. 默认使用类型去找,例如
applicationContext.getBean(Dao.class)
  1. 如果找到多个,再把名称当作id去找,所以这里注入的名字一般不要乱写,例如
@Autowired
Dao dao;
applicationContext.getBean(dao);
  1. 当然也可以和@Qualifier(“dao1”)搭配使用,这样就指定了需要加载的bean的id。
@Qualifier("dao1")
@Autowired
Dao dao;
  1. 自动装配默认一定要把属性值装配好,如果找不到某个属性组件,就会报错;但是也可以给autowired的属性值设置为false;
@Autowired(required=false)
Dao dao;

5.如果出现多个相同的bean时,也可以使用@Primary来指定一个首选的bean装载。其余的可以使用@Qualifier去指定具体的id。

@Autowired 是如何实现装配的

它是由与bean的后置处理器完成装配的,即AutowiredAnnotationBeanPostProcessor,在之前介绍组件注册时已经介绍过后置处理器相关原理,感兴趣的童鞋可以自己去看下源码。

与@Resource、@Inject的区别和联系

  1. @Resource是JSR250提供的自动注入的方式,也就会说它是java规范提供,用法与@Autowired相差较多,它不能与primary和qualifier注解配合使用,也没有Autowired的required属性,只有一个与value属性类似的name属性,可以指定bean的id。
  2. @Inject是JSR330提供的,它的功能和@Autowired基本一致,但是没有required属性。
  3. 综合以上两种注解与@Autowired的对比,还是spring比较强大。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: