Spring中@Autowired和@Resource的区别

说明

注解提供方:

@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

posted @ 2023-10-07 22:55  jihite  阅读(61)  评论(0编辑  收藏  举报