2011-01-10 60 views
24

我有几个相同类型的豆(BeanType)。我如何通过ID注入注释?说:如何通过ID注入Spring依赖项?

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

但是没有注释@ID

我只发现@Qualifier这意味着我将不得不给我所有的豆ID 限定符。当然,有一个更简单的方法?

回答

60

最简单的解决方案是使用@Resource

@Resource(name="bean1") 
public void setBean(BeanType bean) { 
} 

顺便提及,@Qualifier使用ID来指代豆与@Autowired使用,例如

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

其中bean1是的该ID要注入的bean。

Spring manual

对于一个备用的比赛,该bean的名称被认为是默认预选赛值。因此,您可以使用id“main”而不是嵌套的限定符元素来定义bean,从而得到相同的匹配结果。但是,虽然可以使用此惯例通过名称引用特定的bean,但@Autowired基本上是关于具有可选语义限定符的类型驱动注入。这意味着限定符值(即使使用bean名称后备)也会在匹配类型集合内缩小语义;它们不会在语义上表达对唯一bean id的引用。

如果要表达的名字注解驱动的注入,不主要使用@Autowired,即使在技术上是能够通过@Qualifier值指的是bean的名字。相反,请使用JSR-250 @Resource注释,该注释在语义上定义为通过其唯一名称来标识特定目标组件,并且声明的类型与匹配过程无关。

我更喜欢@Resource,它更干净(而不是Spring特有的)。

+0

嗯......那么我一定做了错误的事情,因为@Qualifier没有发现任何bean ..`@资源`工程虽然。你能否检查一下`@ Qualifier`是否适用于ID?根据文档,它需要一个``元素在bean中。 – 2011-01-10 16:00:03