2017-10-12 256 views
0

说我有两个Bean(其中BeanA属性是不可改变的,需要构造函数注入):重写构造函数的参数

<bean id="beanA1" class="BeanA"> 
    <constructor-arg type="ServiceA" ref="serviceA" /> 
    <constructor-arg type="ServiceB" ref="serviceB" /> 
    <constructor-arg type="ServiceC" ref="serviceC" /> 
    <constructor-arg type="boolean" value="false" /> 
</bean> 

<bean id="beanA2" class="BeanA"> 
    <constructor-arg type="ServiceA" ref="serviceA" /> 
    <constructor-arg type="ServiceB" ref="serviceB" /> 
    <constructor-arg type="ServiceC" ref="serviceC" /> 
    <constructor-arg type="boolean" value="true" /> 
</bean> 

由于他们分享一切,但布尔,我想将它们合并为这样:

<bean id="beanA1" class="BeanA"> 
    <constructor-arg type="ServiceA" ref="serviceA" /> 
    <constructor-arg type="ServiceB" ref="serviceB" /> 
    <constructor-arg type="ServiceC" ref="serviceC" /> 
    <constructor-arg type="boolean" value="false" /> 
</bean> 

<bean id="beanA2" parent="beanA1"> 
    <constructor-arg type="boolean" value="true" /> 
</bean> 

然而,这似乎并不奏效

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'beanA2' defined in class path resource [context.xml]: Could not resolve matching constructor (hint: specify index/type/name arguments for simple parameters to avoid type ambiguities) 

任何方式与构造函数注入做到这一点?

回答

0

当前的异常告诉你,没有只有一个boolean值的构造函数。目前还不清楚为什么你需要构造器注入,你可以尝试只需要将其名称设置为false

+0

感谢Vitalii - 这实际上是清楚为什么我需要从第一句构造函数注入:)“其中BeanA属性是不可变的,需要构造函数注入” –

+0

对不起,我错过了) –

+0

不用担心:)在快车道上驾驶! –

1

你不能做你想用构造函数依赖注入来实现的东西,因为在beanA2的情况下,你正在用一个布尔参数调用一个构造函数。

然而,你可以达到你想要什么,如果你改变从注入基于构造到的Setter DI:

<bean id="beanA1" class="BeanA"> 
    <property type="ServiceA" ref="serviceA" /> 
    <property type="ServiceB" ref="serviceB" /> 
    <property type="ServiceC" ref="serviceC" /> 
    <property type="boolean" value="false" /> 
</bean> 

<bean id="beanA2" parent="beanA1"> 
    <property type="boolean" value="true" /> 
</bean> 

对于进一步的细节,你可以读到更多的Spring文档Bean definition inheritance

+0

感谢arkanoid!这就是我所害怕的......不幸的是,所讨论的bean是不可变的,所以setter注入是不能使用的。 –

+0

@levantpied欢迎您。希望下次有用的方式! ;) – araknoid