我的Spring配置中有两个bean beanA
和beanB
。这两个bean都实现了相同的接口。我有一个具有接口类型的自动装配字段的类(即它将填充beanA
或beanB
的实例。
最初只有一个bean,所以我只使用@Autowired
注释并填充了字段。但是,现在有两个可以自动装配的潜在bean。我想基于我的.properties
资源之一中存在属性来自动装配bean。有没有优雅的方法来做到这一点?
我现在使用的解决方案是在自动装配字段上使用@Qualifier
注释来指定beanA
,然后检查该属性是否存在于代码中。如果是,我将该字段重新分配给beanB
的实例。这是一种非常笨重的方式,所以我正在寻找更好的选择。
答案 0 :(得分:2)
除了bean配置文件的新功能之外,您还可以take advantage FactoryBean
在访问时实例化bean。我们的想法是向FactoryBean
注入bean类型(例如fqcn.BeanA
或fqcn.BeanB
)。然后工厂bean将返回bean工厂以实例化您可能需要的正确类型的bean。然后,FactoryBean
的配置可以利用来自资源包的属性。
答案 1 :(得分:1)
Bean配置文件非常适合这种情况 - 基于“活动”配置文件,可以创建一个或另一个bean。
有些旧文章,但仍然是对Spring 3.1中的配置文件的一个很好的参考 - http://blog.springsource.com/2011/02/11/spring-framework-3-1-m1-released/
答案 2 :(得分:0)
Spring Profile可以提供帮助
配置更改
的web.xml
<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>a</param-value>
</context-param>
带有配置文件的spring-beans.xml。配置文件值可以表现为 决策的财产价值。
<bean id="A" profile="a"/>
<bean id="B" profile="b"/>