我有一个我 Autowiring 的 HsqldbReconciler(用于与 HSQLDB 数据库“工作”),例如:
@Autowired
HsqldbReconciler hsqldbReconciler;
将来会有 OracleReconciler、MssqlReconciler 等。我需要根据用户选择的连接类型来使用它们。
我应该如何实现?通常我会有一种工厂,它只返回所需的协调器。我目前可以想象,spring 的唯一方法是 Autowiring 每个 Reconciler 的一个实例,然后在代码中使用它们中的一个。有没有更好的办法?
最佳答案
制作一个包含所有 bean 的工厂类,例如
@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();
}
}
关于spring - 有条件的@Autowired?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39054789/