码迷,mamicode.com
首页 > 其他好文 > 详细

@Resource、@Autowired、@Qualifier

时间:2017-08-30 11:55:21      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:creation   autowired   顺序   方式   设置   结合   required   比较   ring   

@Resource注解是由J2EE提供,而@Autowired是由Spring提供

1. @Resource

@Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入;@Resource有两个属性是比较重要的,分是name和type,


spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。
所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。
如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。


  @Resource装配顺序
  1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
  2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
  3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
  4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;

2.@Autowired

@Autowired默认是按照类型装配注入的,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它required属性为false。

  在使用Spring框架中@Autowired标签时默认情况下使用 @Autowired 注释进行自动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个。
  当找不到一个匹配的 Bean 时,Spring 容器将抛BeanCreationException 异常,并指出必须至少拥有一个匹配的 Bean。

  Spring 允许我们通过 @Qualifier 注释指定注入 Bean 的名称,@Qualifier("XXX") 中的 XX是 Bean 的名称,

  所以 @Autowired 和 @Qualifier 结合使用时,自动注入的策略就从 byType 转变成 byName 了。

 

TODO.  @Autowired是通过反射注入bean

 

@Resource、@Autowired、@Qualifier

标签:creation   autowired   顺序   方式   设置   结合   required   比较   ring   

原文地址:http://www.cnblogs.com/zjwwljty/p/7452221.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!