0

Qualifierアノテーションを使用できないユースケースがありますが(少なくとも私の理解によれば)、Autowireの2つのBean間で解決する必要があります。クラスFoo内で使用されるFooBarの実装がわからないため、修飾子を使用できません。これが私が持っているセットアップです:

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>

bean1とbean2のそれぞれの場合に使用するFooBarの派生を明示的に指定したにもかかわらず、2つのBean(beanAとbeanB)があるため、クラス「Foo」の変数「a」のBeanを解決できないというエラーがスローされます。 。

4

1 に答える 1

1

コンストラクタインジェクションは次のようになります。

<constructor-arg>
    <ref bean="beanA"/>
</constructor-arg>

またはただ

<constructor-arg ref="beanA" />

また、コンストラクタインジェクションを使用しているため、@AutowiredアノテーションをFooBarinからコンストラクタに移動します。Foo

または、次のようにしてフィールドインジェクションを使用することもできます。

<bean id="bean1" class="Foo">
    <property name="a" ref="beanA" />
</bean>
于 2012-07-26T01:24:59.600 に答える