Spring 配置:2 个具有相同 class 引用的 beans

Spring Configuration: 2 beans with same class reference

Spring-配置:我已经创建了 2 个 bean,参考了相同的 class 但不同的数据库会话。

<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;

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

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

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

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

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

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。希望这会有所帮助。