2016-08-20 3 views
0

У меня есть HsqldbReconciler (для «работы» с базой данных HSQLDB), который я autowired, как:условный @Autowired?

@Autowired 
HsqldbReconciler hsqldbReconciler; 

В будущем будет OracleReconciler, MssqlReconciler и т.д., мне нужно будет использовать их соответствующим образом к тип подключения, выбранный пользователем.

Как это реализовать? Обычно у меня была бы какая-то фабрика, которая возвращает только необходимый Reconciler. Единственный способ весной, который я могу себе представить, - это Autowire экземпляр каждого Reconciler, а затем использовать один из них в коде. Есть ли способ лучше?

+0

Возможно полезно: http://stackoverflow.com/questions/19225115/ как сделать-условно-авто-проводка-в-весне – Thilo

ответ

0

сделать Factory класс, который будет содержать все ваши бобы, например

@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