@Resource与@Autowired的区别

时间:2018-06-05 08:57:30

标签: spring

当我用@Resource注释时,我不明白为什么以下行会出错,我在编写@Autowired时没有收到此错误。

@Resource(name = "systemConfigService")
private SystemConfigService systemConfigService;

它告诉,无法解析bean systemConfigService

SystemConfigService是一个接口。

1 个答案:

答案 0 :(得分:2)

@Autowired与@Qualifier一起也按名称自动装配。主要区别在于@Autowired是一个弹簧注释,而@Resource是由JSR-250指定的。所以后者是普通java的一部分,因为@Autowired只能在春天使用。

  

如果您打算按名称表达注释驱动注入,请不要   主要使用@Autowired - 即使技术上能够引用   通过@Qualifier值获取bean名称。相反,更喜欢JSR-250   @Resource注释,在语义上定义为标识a   特定目标组件的唯一名称,具有声明的类型   与匹配过程无关。

     

作为这种语义差异的具体结果,豆类是   自己定义为集合或地图类型不能通过注入   @Autowired,因为类型匹配不适用于它们。使用   @Resource用于此类bean,指的是特定的集合/映射   bean以唯一的名字命名。

注意:与@Autowired相比,它适用于字段,构造函数和多参数方法(允许在参数级别通过限定符注释缩小),@ Resource仅支持字段和具有单个参数的bean属性setter方法。因此,如果您的注射目标是构造函数或多参数方法,请坚持使用限定符。