我有一个扩展B的类A,它实现了C.目前,A采用B有一个输入参数,并且是唯一定义的bean,它是C的一个实现,因此只要需要C就会自动连接。
在不改变需要C的所有地方或A / B / C的类结构的情况下,我需要使B成为定义的bean,以便可以重复使用相同的实例。问题是我有2个C(A和B)的实现。有没有办法标记B,使其无法自动装配?
电流:
<bean id="A" class="A">
<constructor-arg>
<bean class="B">
</constructor-arg>
</bean>
通缉(因此B的相同实例可以在其他地方使用):
<!-- TODO: Somehow mark B so it cannot be autowired -->
<bean id="B" class="B"/>
<bean id="A" class="A">
<constructor-arg ref="B">
</bean>
<bean id="Foo" class="Foo">
<constructor-arg ref="B">
</bean>
答案 0 :(得分:3)
如果要从自动装配中消除bean,则可以将该bean标记的 autowire-candidate 属性设置为false。 例如,考虑你的情况(这里我将B bean的 autowire-candidate 属性设置为false)
<bean id="B" class="B" autowire-candidate="false"/>
<bean id="A" class="A">
<constructor-arg ref="B">
</bean>
<bean id="Foo" class="Foo">
<constructor-arg ref="B">
</bean>
答案 1 :(得分:0)
您可以使用附加到@Autowired
的限定符。
例如,如果您要连接ID为B
的bean,则可以执行以下操作:
@Autowired
@Qualifier("B")
private C c;