我想根据配置文件中的值创建多个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
}
}
我面临的重要挑战是
答案 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;