如何根据属性文件中的值创建MULTIPLE bean

时间:2017-10-26 13:40:44

标签: java spring spring-boot prototype

我想根据配置文件中的值创建多个bean。 我在配置文件中准备好了bean。但是我怎样才能创建多个bean。

我当前的配置文件。

@Configuration
public class JMSConfig {

    @Bean
    public DefaultMessageListenerContainer listenerContainers() {
        ...
    }
}

我的想法是实现这个要求。如果我使用原型范围,每次我要求那个bean时我都会得到一个新的bean。所以我添加了原型。

@Configuration
public class JMSConfig{
    @Value("${value}")
    private long value;

    @Bean
    @Scope("prototype")
    public DefaultMessageListenerContainer listenerContainers() {
        .....
    }

     for(i = 0; i < value; i++){
         //get a new bean
     }
}

我面临的重要挑战是

  1. 如何获得新bean(我评论的部分)
  2. 如何触发&#39; for&#39;我启动应用程序时循环 我是否需要在另一个班级中完成此部分,或者我如何才能达到此要求?

1 个答案:

答案 0 :(得分:0)

如果你想从Spring-Boot main方法中取出你的bean。 像这样使用smth:

@SpringBootApplication
public class MyApplication {

    public static void main(final String[] args) {
        ApplicationContext context = SpringApplication.run(MyApplication.class, args);

        final int totalBeans = context.getEnvironment().getProperty("totalBeans")
        final List<DefaultMessageListenerContainer> beans = new ArrayList<>();
        for (int i = 0; i < totalBeans; i++) {
            beans.add(context.getBean(DefaultMessageListenerContainer.class));
        }

    }

}
此特定示例中的

beans列表包含DefaultMessageListenerContainer.class的N个对象。

&#34; totalBeans&#34; getProperty方法中的参数是application.yml文件中相应属性的名称,用于定义N的总豆数。

BTW:最好不要使用main方法创建bean(如果这不是强制性要求):

在这种情况下,您可以在List<DefaultMessageListenerContainer>类中定义@Configuration bean,然后使用标准的Spring方法将其注入:

@Value("totalBeans")
private int totalBeans;

@Bean 
public List<DefaultMessageListenerContainer> beans() {
    final List<DefaultMessageListenerContainer> beans = new ArrayList<>();
    for (int i = 0; i < totalBeans; i++) {
        beans.add(new DefaultMessageListenerContainer());
    }
    return beans;
}

...

@Autowired private List<DefaultMessageListenerContainer> beans;