Java 如何基于属性文件中的值创建多个bean
我想根据配置文件中的值创建多个bean。 我已经在配置文件中准备好了bean。但是如何创建多个bean呢 我的当前配置文件Java 如何基于属性文件中的值创建多个bean,java,spring,spring-boot,prototype,Java,Spring,Spring Boot,Prototype,我想根据配置文件中的值创建多个bean。 我已经在配置文件中准备好了bean。但是如何创建多个bean呢 我的当前配置文件 @Configuration public class JMSConfig { @Bean public DefaultMessageListenerContainer listenerContainers() { ... } } 我的想法是达到要求。如果我使用prototype scope,每次我请求一个新bean时,我都会得到
@Configuration
public class JMSConfig {
@Bean
public DefaultMessageListenerContainer listenerContainers() {
...
}
}
我的想法是达到要求。如果我使用prototype scope,每次我请求一个新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
}
}
@配置
公共类JMSConfig{
@值(“${Value}”)
私人长期价值;
@豆子
@范围(“原型”)
public DefaultMessageListenerContainer listenerContainers(){
.....
}
对于(i=0;i
我面临的重要挑战是
如果您想从springboot
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));
}
}
}
我想在配置文件中这样做,如果我在main方法中这样做,我的应用程序将无法工作,因为它看到DMLC不存在,它将失败。所以每次我调用listenerContainers()方法时,我都会得到一个新的bean?通常不完全是这个bean。调用
listenerContainers()
时,您可能创建了一个新的DefaultMessageListenerContainer(…)
对象。当您使用@bean注释将其定义为bean时,它就变成了一个bean。具有prototype
作用域的bean每次从容器请求时都会返回不同的实例。使用singleton
范围定义bean意味着容器创建该bean的单个实例,对该bean名称的所有请求都将返回相同的对象,该对象被缓存。对该对象的任何修改都将反映在对beanHey Alex的所有引用中,你能看看这个吗?@hars通过上面的链接回答。顺便说一句,如果你对答案感到满意,请随意接受
@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;