如何根据属性在春季自定义启动器中动态创建 bean



我正在编写一个自定义的 Spring 启动器,我需要在其中根据应用程序中定义的属性注册相同类型的 bean 列表。

我在应用程序属性中有以下属性。

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;
}
}

我想简单地在春季启动应用程序中自动连接我的豆子,如下所示

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(,以便我可以简单地使用带有限定符的自动连线?

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

最新更新