首页 > 解决方案 > 如何在基于属性的spring自定义启动器中动态创建bean

问题描述

我正在编写一个自定义spring starter,我需要根据application.properties中定义的属性注册一个相同类型的bean列表

我在 application.properties 中有以下属性

mybean.names = mybean1, mybean2
mybean1.foo = foo1
mybean2.foo = foo2
mybean1.bar = bar1
mybean2.bar = bar2

自动配置类的当前实现如下

@Configuration
@ConditionalOnClass(MyBeanFactory.class)
public class MyBeanAutoConfiguration {
@Autowire
Environemnt evn;

@Bean(name = {"mybean1"})
public MyBean getBean() {
  String[] names = StringUtils.commaDelimitedListToStringArray(evn.getProperty("mybean.names"));
  MyBean mybean = new Mybean(evn.getProperty(names[0] + ".foo"), 
                               evn.getProperty(names[0] + ".bar"));
return myBean;

}

}

我想在 Spring Boot 应用程序中简单地用 qualifer 自动装配我的 bean,如下所示

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyApplication {

  @Autowired
  @Qualifer("mybean1")
  MyBean mybean;

  public static void main(String[] args) {
    SpringApplication.run(VaultApplication.class, args);
  }

如何更改我的自动配置类以创建具有在属性文件中定义的不同名称的多个 bean(在这种情况下,我如何创建 bean mybean2),以便我可以简单地使用带有限定符的自动装配?

标签: springspring-bootspring-starter

解决方案


我不确定我是否理解你的问题,但是如果你想拥有几个不同名称的 bean,那么最好的方法是在你的配置类中编写多个不同名称的 @Bean 方法,这样你就可以通过 @Qualifer 自动装配它们中的每一个


推荐阅读