2016-08-20 37 views
0

我有一個HsqldbReconciler(爲「工作」與HSQLDB數據庫),我自動裝配,如:有條件@Autowired?

@Autowired 
HsqldbReconciler hsqldbReconciler; 

在未來會有一個OracleReconciler,MssqlReconciler,等我將需要相應地使用它們的用戶選擇的連接類型。

我該如何實施?通常我會有一種工廠,它只返回所需的協調器。我現在可以想象,春天唯一的辦法就是Autowire每個Reconciler的一個實例,然後在代碼中使用其中的一個。有沒有更好的辦法?

+0

可能有所幫助:http://stackoverflow.com/questions/19225115/ how-to-do-conditional-auto-wiring-in-spring – Thilo

回答

0

使工廠類,將包含所有的豆類,如

@Component 
class Factory{ 
    @Autowired HsqldbReconciler hsqldb; 
    @Autowired OracleReconciler oracle; 
    @Autowired MssqlReconciler mssql; 

    public Object getInstance(String type){ 
    switch(type){ 
    case "mssql" : return mssql; 
    case "oracle" : return oracle; 
    // and so on 
    default : return null; 
    } 

    } 

} 

現在使用這個廠如下

class SomeClass{ 

    @Autowired private Factory factory; 

    public Object someMethod(){ 
    Object reconciler = factory.getInstance("mssql"); 
    ((MssqlReconciler)reconciler).someMethod(); 
    } 
} 
+0

好吧,我會這樣做的。但是,這意味着我將在運行時實例化所有「Reconcilers」,儘管我只需要一個。對? – tobi