@Resource和@Autowired注解都是用来实现依赖注入的。只是@AutoWried按by type自动注入,而@Resource默认按byName自动注入。
@Autowftred
直接在属性上使用即可!也可以在set方式上使用!!
使用Autowired 我们可以不用编写Set方法了,前提是你这个自动装配的属性在IOC (Spring)容器中存在,且符合名字byname!
//如果显示定义了Autowired的required属性为false,
//说明这个对象可以为null,否则不允许为空
@Autowired(required = false)
private Cat cat;
//如果@Autowired自动装配的环境比较复杂,
//自动装配无法通过一个注解【@Autowired】完成的时候、
//我们可以使用@Qualifier(value="xxx")去配置@Autowired的使用,
//指定一个唯一的bean对象注入!
@Autowired
@Qualifier(value = "dog1")
private Dog dog;
@Autowftred优先byType,如果类型无法匹配就找和属性名一致的名字(byName),找不到就报错,
如果同时配置了@Quralifern("XXX"),就去寻找配置的这个值,找不到就报错,注意,这个时候会屏蔽掉按类型匹配的方式(即使一个类型只有一个bean也无法正常运行)
@Resource
pub1ic class People {
@Resource(name = "cat2")
private cat cat;
@Resource
private Dog dog;
}
@Resource装配顺序
1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;
@Resource优先byName,如果找不到会尝试byType,如果无法匹配到唯一的类型,就报错
在@Resource中使用了name属性之后,就去寻找配置的这个值,注意,这个时候会屏蔽掉按类型匹配的方式(即使一个类型只有一个bean也无法正常运行)
小结:
@Resource和@Autowired的区别:
·都是用来自动装配的,都可以放在属性字段上
.@Autowired通过byType的方式实现,而且必须要求这个对象存在!【常用】
.@Resource默认通过byname的方式实现,如果找不到名字,则通过byType实现!如果两个都找不到的情况下,就报错!【常用】
·执行顺序不同:@Autowired通过byType的方式实现。@Resource默认通过byname的方式实现。



