【发布时间】:2012-07-24 13:12:34
【问题描述】:
我有一个用例,我不能使用 Qualifier 注释(至少根据我的理解),但我仍然需要在 Autowire 的两个 bean 之间进行解析。我不能使用限定符,因为我不知道 FooBar 的哪个实现将在 Foo 类中使用。这是我的设置:
class Foo
{
@Autowired
private FooBar a;
public Foo(FooBar aa) {a = aa; }
}
interface FooBar
{}
class FooBarA implements FooBar
{}
class FooBarB implements FooBar
{}
弹簧配置:
<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。
【问题讨论】:
-
您是故意排除您的
Foo构造函数,还是试图将一个bean 注入到一个不存在的构造函数中? -
错过了构造函数。但是构造函数在原始代码中。
标签: spring