创建一个无法自动装配的Spring bean

时间:2013-12-09 18:42:47

标签: java spring

我有一个扩展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>

2 个答案:

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