[英]Create a Spring bean that cannot be autowired
我有一个扩展了B的类A,该类实现了C。当前,A接受B具有一个输入参数,并且是C的实现中唯一定义的bean,因此在需要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>
如果要消除自动装配的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>
您可以使用附加到@Autowired
限定词。
例如,如果要将ID为B
的bean连接起来,可以执行以下操作:
@Autowired
@Qualifier("B")
private C c;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.