1. @Resource
@Resource使用在成员属性和setter方法上。其默认情况下按照名称注入,如果没有显式声明名称则按照变量名称或者方法中对应的参数名称进行注入。
2. @Autowired3.4 装配可选
@Autowired通常适用于构造函数,成员变量以及方法上。使用频率相当高。
3.装配
@Resource没有提供可选择装配的特性,一旦无法装配则会抛出异常;而@Autowired提供了required
属性(默认值为true
)以避免这种情况,设置@Autowired为false
。
ps:
required = true
这个表示:注入bean的时候该bean必须存在,不然就会注入失败!
required = false
这个表示:注入bean的时候如果bean存在,就注入成功,如果没有就忽略跳过,启动不会报错!但是不能直接使用,因为Bean为NULL。
4. 总结
@Resource和@Autowired的优先级顺序不同,另外@Resource属于 Jakarta EE规范而@Autowired属于Spring
范畴,@Resource无法使用在构造参数中,@Autowired支持required
属性。从面向对象来说,@Resource更加适用于多态性的细粒度注入,而@Autowired更多专注于多态的单例注入。