Spring的Autowired注解和Resource注解的区别

1、Autowired注解

  • 注入策略:

         为Spring框架提供的注解,

         默认注入的策略为 按照类型(ByType)注入。

  • 主要定义的操作对象:

         bean对象的变量、构造器注入、set方法。

  •  重要的属性:

         Qualifier、required

  •  Bean的查找规则:

             a) 默认是要对象必须存在的,如果允许对象为null,则要设置required = false
             b) 使用Autowired将Bean对象注入到容器中时,会先根据Bean类型进行查找,如果该类型有多个bean只,无法选择具体哪一个的情况,使用Qualifier配合使用。

2、Resource注解

  • 注入策略:

             javax提供的扩展包中的注解,
             默认注入的策略为 按照名称(ByName)注入,
             底层采用了反射机制。

  •  主要定义的操作对象:

             变量、set方法

  • 重要的属性

             name(解析为Bean的名称)、
             例如:@Resource(name = "bed")
             type(解析为Bean的Java类型)
             @Resource(type = "java.lang.String.class")

  • Bean的查找规则:

             a)    同时指定了name和type,则在Spring上下文中找到唯一匹配的Bean,找不到则抛出异常。
             b)    指定了name,则在Spring上下文中找到了名称(使用注解注册的Bean的name一般为类名称的驼峰写法)匹配的Bean进行装配,找不到或者找到多个则抛出异常。
             c)    指定了type,在Spring上下文中找到匹配的唯一Bean进行装配,找不到或者找到多个则抛出异常。
             d)    没有指定name或者type,按照byName进行查找装配,如果没有匹配,则回退到一个原始类型(String hello变量的原始类型就是java.lang.String)进行匹配(根据type匹配原始类型)。找不到或者找到多个则抛出异常。

 

总结:

        使用autowired默认使用type进行Bean属性注入,如果遇到bean有多个值,使用注解Qualifier进行指定。
        使用Resource默认使用name进行Bean属性注入,如果没有找到,则使用type进行属性注入。

猜你喜欢

转载自blog.csdn.net/weixin_44458365/article/details/107001781