例如,我在我的 Spring 配置中创建了一系列“test-my-service”对象,每个对象都有与人为测试场景相关的数据。目前,每次我想运行新场景或场景列表时,我都在手动编辑 Spring 配置。有没有一种方法可以为 bean 名称添加前缀,然后将所有具有该前缀(或后缀)的 bean 加载到列表或数组中?像....
<bean name="env1-test1"/>
<bean name="env2-test1"/>
这是我最终编写的代码。我无法从我之前接受的示例中初始化 beanFactory 对象:
String[] beanNames = context.getBeanNamesForType(Inputs.class);
for (String beanName : beanNames) {
if (beanName.startsWith("env")) {
System.out.println("Found a bean of type " + Inputs.class.getName());
Inputs bean = (Inputs)context.getBean(beanName);
doTest(bean);
}
}
最佳答案
您可以使用 ListableBeanFactory
接口(interface)检索所有 bean 名称,然后加载您感兴趣的那些:
private @Autowired ListableBeanFactory beanFactory;
public void doStuff() {
for (String beanName : beanFactory.getBeanDefinitionNames()) {
if (beanName.startsWith("env")) { // or whatever check you want to do
Object bean = beanFactory.getBean(beanName)
// .. do something with it
}
}
}
或者,如果目标 bean 都是同一类型,那么您可以使用 ListableBeanFactory.getBeansOfType()
或 ListableBeanFactory 按类型而不是按名称请求它们。 getBeanNamesForType()
.
注入(inject)的 ListableBeanFactory
将成为“当前”应用程序上下文。
关于java - 我可以通过扫描 spring 配置文件中的 beans 来动态创建一个列表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3808048/