2013-12-09 61 views
0

我有一个扩展B中的A类,它实现C.目前,采用B有一个输入参数,并且是唯一定义的bean是C的实现,所以它就会自动装配每当需要C时。创建一个Spring bean不能自动装配

在不改变其中需要C中地方或A/B/C的类结构的ALL,我需要使B中的定义豆所以相同的实例可以被重新使用。问题是我有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> 

回答

3

如果你想消除自动装配一个bean,然后就可以设置自动装配候选的属性,bean标签假的。 例如,考虑你的情况(在这里我设置b bean的自动装配候选属性设置为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> 
+0

完美,正是我一直在寻找! – mbarrows

0

你可以使用连接到@Autowired预选赛。

例如,如果你想为带有ID B豆,你可以做到以下几点:

@Autowired 
@Qualifier("B") 
private C c; 
+0

这工作,但要求我去改变它的每一个地方C的使用,这是不可扩展的我的建筑。 – mbarrows

相关问题