Java Spring自动装配配置文件

时间:2016-09-19 11:20:42

标签: java spring

我有一个类让我们说类 A 这是一个Configuration类,只有在激活配置文件“production”时才会运行。但是在类 B 中,应用程序的主要逻辑是我正在使用@Autowired注释引用在类 A 中创建的某个bean,我的问题是什么时候例如我运行应用程序与配置文件让我们说“默认”它会引发异常,因为没有创建适当的bean。所以我的问题是,只有当个人资料“生产”处于活动状态时,我才能在B级中使用此自动装配?

2 个答案:

答案 0 :(得分:7)

我不明白你的问题。但是如果需要注入可选bean,则可以使用@Autowired(required = false),然后在没有任何限定bean的环境中,相关属性将为null。

答案 1 :(得分:3)

为您提供两种A接口实现:

public interface A {}

@Component(value="A_dev")
public class ADev implements A {}

@Component(value="A_prod")
public class AProd implements A {}

public class B {
    @Autowired @Qualifier("A") A a;
}

添加带有别名和属性占位符的XML配置:

<beans>
    <alias name="${a.class}" alias="A"/>
    <context:property-placeholder location="app.properties"/>
<beans>

app.properties应包含

a.class=A_dev

然后更改属性将改变您的注入类(需要重新启动应用程序)。

还有其他解决方案,例如:

  • 使用maven过滤XML上下文(构建时)
  • 根据某些内容创建一个返回不同A实现的bean工厂
  • 使用spring EL#{expression}