当我用@Resource注释时,我不明白为什么以下行会出错,我在编写@Autowired时没有收到此错误。
@Resource(name = "systemConfigService")
private SystemConfigService systemConfigService;
它告诉,无法解析bean systemConfigService
SystemConfigService是一个接口。
答案 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方法。因此,如果您的注射目标是构造函数或多参数方法,请坚持使用限定符。