2016-04-13 2 views
1

から種類やジェネリック医薬品のBeanを取得します。私は、次の春の豆を持ってListableBeanFactory

今、タイプProvider<A>のすべての豆をListableBeanFactoryから探したいと思います。私はこの方法getBean方法があります知っている、と私はこのようなResolvableTypeを使用してみました:

listableBeanFactory.getBean(ResolvableType.forClassWithGenerics(Provider.class, AImpl.class).resolve()) 

を動作するようには思えません。たぶん問題は、私のケースではAImplがインターフェイスの実装です。これは可能ですか?

これは動作するようです:

listableBeanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Provider.class, A.class)) 

ではなく、この:

listableBeanFactory.getBeanNamesForType(ResolvableType.forClassWithGenerics(Provider.class, AImpl.class)) 
+0

を使用してProvider秒を解決することができません。 – Xogle

答えて

1

ここにあなたのProviderの種類がProvider<A>なくProvider<AImpl>(または任意の他の実装)です。たとえば:我々は両方の例に戻っている

class MyProviderA extends Provider<A> { 
    A get() { 
     return new AImpl(); 
    } 
} 

class MyProviderA extends Provider<A> { 
    A get() { 
     return new AImpl2(); 
    } 
} 

対実装では、クラス定義の一部ではありません。 getメソッドの実装を見ることなく、この2つの方法の違いはわかりません。

同じでは春のために行く - インターフェースがクラスではないResolvableType.forClassWithGenerics(Provider.class, AImpl.class)

関連する問題