如何通过ID注入Spring依赖项?

时间:2011-01-10 15:54:43

标签: spring dependency-injection annotations

我有几个类型相同的bean(BeanType)。如何通过带注释的ID注入它们?说:

@Autowired @ID("bean1")
public void setBean( BeanType bean ) {
}

但是没有注释@ID

我只发现@Qualifier这意味着我必须提供所有的bean ID 限定符。当然,还有一种更简单的方法吗?

1 个答案:

答案 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,它更干净(而不是特定于春天)。