基于属性自动装配bean

时间:2012-06-13 17:55:17

标签: java spring dependency-injection javabeans autowired

我的Spring配置中有两个bean beanAbeanB。这两个bean都实现了相同的接口。我有一个具有接口类型的自动装配字段的类(即它将填充beanAbeanB的实例。

最初只有一个bean,所以我只使用@Autowired注释并填充了字段。但是,现在有两个可以自动装配的潜在bean。我想基于我的.properties资源之一中存在属性来自动装配bean。有没有优雅的方法来做到这一点?

我现在使用的解决方案是在自动装配字段上使用@Qualifier注释来指定beanA,然后检查该属性是否存在于代码中。如果是,我将该字段重新分配给beanB的实例。这是一种非常笨重的方式,所以我正在寻找更好的选择。

3 个答案:

答案 0 :(得分:2)

除了bean配置文件的新功能之外,您还可以take advantage FactoryBean在访问时实例化bean。我们的想法是向FactoryBean注入bean类型(例如fqcn.BeanAfqcn.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"/>
相关问题