我有以下春豆:
MyProviderA extends Provider<A>
和
MyProviderB extends Provider<B>
其中A
和B
是接口。
现在我想从Provider<A>
找到ListableBeanFactory
类型的所有bean。我知道有一种方法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 :(得分:1)
此处Provider
的类型为Provider<A>
而非Provider<AImpl>
(或任何其他实施)。例如:
class MyProviderA extends Provider<A> {
A get() {
return new AImpl();
}
}
VS
class MyProviderA extends Provider<A> {
A get() {
return new AImpl2();
}
}
我们在两个示例中返回的实现都不是类定义的一部分。如果不考虑get
方法的实现,我们将无法看到两者之间的任何差异。
春天也是如此 - 它将无法使用Provider
解析您的ResolvableType.forClassWithGenerics(Provider.class, AImpl.class)