我正试图在@Configuration类中模仿Spring XML别名的行为。
我在XML中有一个看起来像这样的别名:
<alias name="${com.some.bean}" alias="myBean"/>
我有一个看起来像这样的@Configuration类:
@Configuration
public class MyConfig {
@Lazy
@Bean(name = "bean1")
public MyBean bean1() { return new MyBean(); }
@Lazy
@Bean(name = "bean2")
public MyBean bean2() { return new MyBean(); }
}
我想动态加载bean1
或bean2
,并为加载别名myBean
的人加载。根据{{1}}财产的决议。使用XML很容易,但我找不到com.some.bean
等价物。
注意:我不想使用配置文件,因为这不是我的系统当前的工作方式,并且目前无法更改所有属性解析以使用配置文件而不是属性文件。
答案 0 :(得分:2)
一个丑陋的解决方法是定义一个@Bean
,它将属性值作为@Value
接收并自行执行解析
@Bean("myBean")
public MyBean myBean(@Value("${com.some.bean}") String value) {
if (value.equals("bean1"))
return bean1();
else if (value.equals("bean2"))
return bean2();
else {
throw new RuntimeException("nope, something went wrong");
}
}