1

我有两个 bean,beanA并且beanB,在我的 Spring 配置中。这两个 bean 都实现了相同的接口。我有一个带有接口类型的自动装配字段的类(即,它将填充beanAor的实例beanB)。

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

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

4

3 回答 3

2

除了 bean 配置文件的新功能之外,您还可以利用FactoryBean访问时实例化 bean。这个想法是注入FactoryBeanbean 类型(例如fqcn.BeanAfqcn.BeanB)。然后工厂 bean 将返回 bean 工厂以实例化您可能需要的正确类型的 bean。then的配置FactoryBean可以利用来自资源包的属性。

于 2012-06-13T18:11:53.707 回答
1

Bean 配置文件可能非常适合这一点 - 基于“活动”配置文件,可以创建一个或另一个 bean。

有点旧的文章,但仍然是 Spring 3.1 中配置文件的一个很好的参考 - http://blog.springsource.com/2011/02/11/spring-framework-3-1-m1-released/

于 2012-06-13T18:03:59.967 回答
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"/>
于 2012-06-13T18:12:29.693 回答