繁体   English   中英

创建无法自动连线的Spring bean

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM