2016-09-19 94 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的環境中,相關屬性將爲空。