我有几个类型相同的bean(BeanType
)。如何通过带注释的ID注入它们?说:
@Autowired @ID("bean1")
public void setBean( BeanType bean ) {
}
但是没有注释@ID
。
我只发现@Qualifier
这意味着我必须提供所有的bean ID 和限定符。当然,还有一种更简单的方法吗?
答案 0 :(得分:69)
最简单的解决方案是使用@Resource
@Resource(name="bean1")
public void setBean( BeanType bean ) {
}
顺便提一下,@Qualifier
用于通过ID引用bean以与@Autowired
一起使用,例如
@Autowired @Qualifier("bean1")
public void setBean( BeanType bean ) {
}
其中bean1
是要注入的bean的ID。
请参阅Spring manual:
对于后备匹配,bean名称被视为默认限定符值。因此,您可以使用id“main”而不是嵌套的限定符元素来定义bean,从而得到相同的匹配结果。但是,虽然您可以使用此约定来按名称引用特定bean,但
@Autowired
基本上是关于具有可选语义限定符的类型驱动注入。这意味着即使使用bean名称回退,限定符值在类型匹配集中也总是具有缩小的语义;它们在语义上不表示对唯一bean id的引用。
和
如果您打算按名称表达注释驱动的注入,请不要主要使用
@Autowired
,即使技术上能够通过@Qualifier
值引用bean名称。相反,使用JSR-250@Resource
注释,该注释在语义上定义为通过其唯一名称标识特定目标组件,声明的类型与匹配过程无关。
我更喜欢@Resource
,它更干净(而不是特定于春天)。