假设我有两个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 :(得分: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
答案 1 :(得分:0)
当前异常,告诉您没有只有一个boolean
值的构造函数。目前尚不清楚为什么需要构造函数注入,您可以尝试将所需属性设置为false
。