从ListableBeanFactory获取类型和泛型的bean

时间:2016-04-13 20:52:54

标签: java spring

我有以下春豆:

MyProviderA extends Provider<A>

MyProviderB extends Provider<B>

其中AB是接口。

现在我想从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))

1 个答案:

答案 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)