gpt4 book ai didi

java - Spring:如何通过类型参数获取适用的通用 bean 实例?

转载 作者:搜寻专家 更新时间:2023-11-01 03:37:21 26 4
gpt4 key购买 nike

我使用的是 Spring 4.1.2,我有以下代码:

public class Foo {
}

public class Bar {
}

public interface Service<T> {
}

@Service("fooService")
public class FooServiceImpl implements Service<Foo> {
}

@Service("barService")
public class BarServiceImpl implements Service<Bar> {
}

我知道 Spring 4 可以像下面这样注入(inject)通用 bean 实例:

@Autowired
private Service<Foo> service; // works fine

但我需要像下面这样以静态方式获取它们:

Service<Foo> service = getService(getContext(), Foo.class);

...

public static <T> Service<T> getService(ApplicationContext context,
Class<T> objectClass) {
...
}

我尝试使用 ApplicationContext.getBeansOfType(Service.class) 但它返回所有可用的 bean 实例(fooServicebarService)。所以我需要以某种方式传递类型参数。

有什么办法吗?像这样:

@SupressWarnings("unchecked")
Service<Foo> service = applicationContext.getGenericBean(
Service.class, // bean class
Foo.class // type arguments
// ...
);

最佳答案

从应用程序上下文中以编程方式获取通用 bean:

String[] beanNames = applicationContext.getBeanNamesForType(ResolvableType.forType(new ParameterizedTypeReference<String>() {}));
if (beanNames.length > 0) {
String bean = (String) applicationContext.getBean(beanNames[0]);
}

或检查this如果您对使用特定处理程序处理通用对象的机制感兴趣,请回答。

关于java - Spring:如何通过类型参数获取适用的通用 bean 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26971422/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com