2016-09-19 95 views
1

我有一个班可以说类A这是一个配置类,只有在配置文件“生产”被激活时才能运行。但在类B其中应用程序的主要逻辑是我使用的@Autowired注释,指的是在类A创建一些豆,我的问题是,当我运行应用程序与配置文件可以说“默认“它会抛出异常,因为没有创建相应的bean。所以我的问题是,只有当配置文件“生产”处于活动状态时,我如何才能在我的B类中使用此Autowired?Java Spring自动装配配置文件

+1

根据您的使用情况,创建一个2类实现的接口。一个是真正的课堂,另一个是没有课堂的课程。 – Schaka

回答

2

提供你有一个接口的两个实现:

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 

然后改变propertiy会改变你的注入类(应用程序重新启动是必需的)。

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

  • 与行家(建立时间)过滤XML上下文
  • 创建bean工厂返回不同的A的实现取决于东西
  • 使用弹簧EL#{表达}
3

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