说明
注解提供方:
@Autowired这个由Spring提供;@Resource由JDK提供
区别
①注解内参数不同
@Autowired只包含一个required参数,默认为true,表示注入的时候,该bean必须存在,否则就会注入失败;required=false,表示忽略当前要注入的bean,如果有直接注入,没有跳过,不会报错
@Resource 包含七个参数,其中最重要的两个是name和type
②装配方式默认值不同
@Autowired默认按type自动装配
@Resource默认按name自动装配
③注解应用范围不同
@Autowired能够用在构造方法、成员变量、方法参数、注解上
public class Service {
//构造方法注入
@Autowired
public Service(Service service) {
this.service = service;
}
//成员变量注入
@Autowired
private Service service;
//方法参数注入
@Autowired
public void setService(Service service) {
this.service = service;
}
}
@Resource能用在类、成员变量和方法参数上
④出处不同
@Autowired是Spring定义的注解
@Resource定义在JDK中
所以@Autowired只能在Spring框架下使用,而@Resource则可以与其他框架一起使用
⑤加载顺序不同
@Autowired默认先按byType进行匹配,如果发现找到多个bean,则又按照byName方式进行匹配,如果还有多个,则报出异常。
@Resource的装载顺序分为四种情况(name\type 组合)
参考
https://zhuanlan.zhihu.com/p/522095455