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/107000156