我可以通过扫描spring配置文件中的bean来动态创建List吗?

bak*_*aro 3 java spring

例如,我在Spring配置中创建了一系列'test-my-service'对象,每个Object都有关于人为测试场景的数据.目前,每次我想运行新场景或场景列表时,我都会手动编辑Spring配置.有没有办法可以为bean名称添加前缀,然后将带有该前缀(或后缀)的所有bean加载到List或Array中?就像是....

<bean name="env1-test1"/>
<bean name="env2-test1"/>
Run Code Online (Sandbox Code Playgroud)

这是我最后编写的代码.我无法从之前接受的示例中初始化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); 
     }
}
Run Code Online (Sandbox Code Playgroud)

ska*_*man 14

您可以使用该ListableBeanFactory接口检索所有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
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

或者,如果目标bean都是相同的类型,那么您可以使用ListableBeanFactory.getBeansOfType()或按类型而不是名称来请求它们ListableBeanFactory.getBeanNamesForType().

注入ListableBeanFactory将是"当前"应用程序上下文.