Spring配置:2个具有相同类引用的bean

时间:2015-02-25 10:59:16

标签: java spring spring-mvc annotations autowired

Spring-configuration:我创建了2个bean,引用了同一个类但不同的数据库会话。

<bean id="abc1" class="abc">
<bean id="abc2" class="abc">

现在有没有办法将id为“abc1”的bean设置为自动装配的默认bean,并在明确提到时使用abc2进行自动装配:

@Autowiring
@Qualifier("abc2")
private abc obj;

解决方案:

<bean id="abc1" class="abc" primary="true">

使abc1默认为自动装配。

用于创建abc2的实例,我们可以使用:

@Autowired
@Qualifier("abc2")
private abc obj;

2 个答案:

答案 0 :(得分:3)

xml的@primary注释或primary属性完全用于此目的。这是相同的细节。这里有很好的记录。

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/annotation/Primary.html

因此,如果您提及<bean id="abc1" class="abc" primary="true"/>,它将优先于abc2,您可以@Qualifier使用abc2,只要您需要。希望这会有所帮助。

答案 1 :(得分:0)

如果跳过@Qualifier注释,则Spring将查找与private成员同名的bean。例如:

@Autowired
private abc abc1; //Spring will search for a bean with id="abc1"

这是您可以使用abc1作为默认值。

如果你不想让Spring搜索特定的bean,那么你可以触发@Qualifier,然后Spring不会关心如何调用该成员,而是会指定它的值来引用bean在id注释中指出的@Qualifier相同:

@Autowired
@Qualifier("abc2")
private abc theNameDoesNotMatter;