は春

2017-06-23 10 views
0

におけるジェネリック医薬品とサービスを生成します。は春

@Service 
public class A<T extends I> { 
    @Autowired 
    T val; 
} 

@Service 
public class B1 implements I { } 

@Service 
public class B2 implements I { } 

public interface I { } 

@Service 
public class C { 
    @Autowired 
    A<B1> subservice; 
} 

春はA.valのために複数の候補があると文句を言うだろう。 Aの可能なサービスの両方を明示的に構築することを除いて、これに対する解決策がありますか?

+0

autowiredフィールドで '@ Qualifier'を使用すると、必要な正確なBeanを指定できます。 – 11thdimension

+0

コンストラクタインジェクションを使用して変換するとどうなりますか(とにかくお勧めです)? – chrylis

+0

サブクラスを作成することは強制されません(あなたが恐れている場合)。 Aを単純なクラスにして、Tを引数として単純なクラスを作成し、 '@Bean public A a1(B1 b){ \t \t return new A <>(b);のような2つのメソッドを追加することができます。 \t} 'と入力してください。 –

答えて

0

春はジェネリックスを自動的にオートワイヤしないので、私は各コ​​ンビネーションごとにBeanを作成しました。

説明のためにspringはジェネリックを使用してどのBeanを使用するかを決定しますが、適切なジェネリックでオブジェクトを直接生成することはできません。