我有一个类让我们说类 A 这是一个Configuration类,只有在激活配置文件“production”时才会运行。但是在类 B 中,应用程序的主要逻辑是我正在使用@Autowired注释引用在类 A 中创建的某个bean,我的问题是什么时候例如我运行应用程序与配置文件让我们说“默认”它会引发异常,因为没有创建适当的bean。所以我的问题是,只有当个人资料“生产”处于活动状态时,我才能在B级中使用此自动装配?
答案 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
然后更改属性将改变您的注入类(需要重新启动应用程序)。
还有其他解决方案,例如: