【问题标题】:Autowiring a bean based on a property基于属性自动装配 bean
【发布时间】:2012-06-13 17:55:17
【问题描述】:

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

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

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

【问题讨论】:

    标签: java spring dependency-injection javabeans autowired


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        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"/>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-04-17
          • 2014-11-05
          • 2018-07-22
          • 1970-01-01
          • 2011-11-30
          • 1970-01-01
          • 2018-12-26
          相关资源
          最近更新 更多