我有一个用例,我不能使用限定符注释(至少根据我的理解)但我仍然需要在两个bean之间解决Autowire。我不能使用限定符,因为我不知道在Foo类中将使用哪个FooBar实现。这是我的设置:
class Foo
{
@Autowired
private FooBar a;
public Foo(FooBar aa) {a = aa; }
}
interface FooBar
{}
class FooBarA implements FooBar
{}
class FooBarB implements FooBar
{}
spring config:
<bean id="beanA" class="FooBarA"/>
<bean id="beanB" class="FooBarB"/>
<bean id="bean1" class="Foo">
<constructor-arg><ref bean="beanA"/></constructor-arg>
</bean>
<bean id="bean2" class="Foo">
<constructor-arg><ref bean="beanB"/></constructor-arg>
</bean>
这会抛出一个错误,说它无法为类“Foo”中的变量“a”解析bean,因为有两个bean(beanA和beanB),即使我已明确指定在每种情况下使用哪个FooBar派生bean1和bean2。
答案 0 :(得分:1)
我相信构造函数注入应该如下所示:
<constructor-arg>
<ref bean="beanA"/>
</constructor-arg>
甚至只是
<constructor-arg ref="beanA" />
同样将@Autowired
注释从FooBar
中的Foo
移到构造函数中,因为您正在使用构造函数注入。
或者,你可以这样做:
<bean id="bean1" class="Foo">
<property name="a" ref="beanA" />
</bean>