Hazzo:
私は、次のようにインターフェースを持っています:
public interface Solver {
void execute(final String definition);
}
私はいくつかのソルバーの実装を持っています。例えば:
@Qualifier("naive")
@Service
public class NaiveSolver implements Solver {
@Override
public void execute(final String definition) {
}
}
@Qualifier("optimal")
@Service
public class OptimalSolver implements Solver {
@Override
public void execute(final String definition) {
}
}
さて、私のデータベースに私は、次のようにこれらのソルバーのデータを持っています:
type: textual - examples: simple, naive
definition: textual
このデータをフェッチする場合、私はマップする必要がtype
、それは提供を解決することができますので、実際のサービスインスタンスに列をdefinition
。
だから、私の質問はこれに沸く:私は、与えられたことができますどのようにtype
文字列を、対応のインスタンスを取得Solver
修飾子はそれと同等となっているサービスインスタンスをtype
?私は信じている@Autowired
私は、実行時に動的に豆を見つける必要があるとして、ここでは使用することはできません。
ニコライシェフチェンコ:
春4以来、あなたは、Beanの修飾子がキーで、豆自体が価値ある地図に複数のimplemetationsをautowireすることができます
@Autowired
private Map<String, Solver> solvers;
void doStuff() {
String type = ... // obtain type
Solver solver = solvers.get(type);
solver.execute(...)
}
更新
Beanを命名する正しい方法ではありません
@Qualifier("naive")
@Service
だが
@Service("naive")
@Qualifier
使用されている@Autowired
正しいBeanが注入されていることを確認します
@Autowired
@Qualifier("naive")
private Solver naiveSolver;