2016-08-20 7 views
0

Ich habe ein HsqldbReconciler (für „Arbeit“ mit einer HSQLDB-Datenbank), die ich autowired, wie:bedingt @Autowired?

@Autowired 
HsqldbReconciler hsqldbReconciler; 

In Zukunft wird es eine OracleReconciler, MssqlReconciler usw. sein Ich muss sie das entsprechend verwenden, Art der Verbindung, die ein Benutzer gewählt hat.

Wie soll ich das umsetzen? Normalerweise hätte ich eine Art Fabrik, die nur den benötigten Reconciler zurückgibt. Der einzige Weg im Frühling, den ich mir derzeit vorstellen kann, ist, eine Instanz jedes Reconcilers mit Autowire zu versehen und dann einen von ihnen im Code zu verwenden. Gibt es einen besseren Weg?

+0

Wahrscheinlich hilfreich enthält: http://stackoverflow.com/questions/19225115/ How-to-do-bedingte-Auto-Verdrahtung-im Frühjahr – Thilo

Antwort

0

eine Factory-Klasse machen, die alle Ihre Bohnen, zB

@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; 
    } 

    } 

} 

nun dieses Werk wie folgt verwenden

class SomeClass{ 

    @Autowired private Factory factory; 

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

ok, ich werde das tun. Es bedeutet jedoch, dass ich alle "Reconciler" zur Laufzeit instanziieren werde, obwohl ich nur einen brauche. Recht? – tobi