1

一般的なパラメータ化されたプロパティへの注入の最善の回避策は何ですか?

Spring Jira のレコードからの簡単な例:

@Component
public abstract class AbstractFoo<V extends Bar> {

   @Autowired
   protected V bar;
}

@Component
public ConcreteFoo1 extends AbstractFoo<ConcreteBar1> {
}

@Component
public ConcreteFoo2 extends AbstractFoo<ConcreteBar2> {
}

このような抽象AbstractFooクラスがあり、generecis ( ConcreteFoo1, ConcreteFoo1) を介して注入する必要がある Spring Bean を決定しようとすると、Spring は次のような例外をスローします。

org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'foo.ConcreteFoo1'
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: 
No unique bean of type [bar.Bar] is defined: 
expected single matching bean but found 2: [concreteBar1, concreteBar2]

Spring 3.2.1 で同様のシナリオをテストしました。この問題の最善の回避策は何ですか?

この問題は、2009 年 3 月 10 日に報告されました。
この機能がまだ Spring に実装されていないのはなぜですか? この不十分さを解決することを妨げている合併症はありますか?

4

1 に答える 1

1

あなたが書いたようなものです:

  @Autowired
  protected Bar bar; 

Spring は、ConcreteBar1 を注入したいことを理解できません

したがって、セッターインジェクションを使用できます。

public abstract class AbstractFoo<V extends Bar> {
    protected V bar;
} 

@Component
public class ConcreteFoo1 extends AbstractFoo<ConcreteBar1>{

@Inject
private void setBar(ConcreteBar1 bar){
    this.bar = bar;
}
}
于 2013-04-28T05:51:06.480 に答える