ファクトリを作成したいのですが、Spring では簡単ではなく、スペースに迷いました :p
これが私がやりたいことです。
複数のインターフェイスを実装する抽象クラスがあります (Runnable およびいくつかの個人用インターフェイス)
public abstract class AbstractDocMan implements Runnable, DocMan {
protected AbstractDocUnit docUnit;
// some attributes
// some getter & setter
}
この抽象クラスから拡張されたいくつかのクラスがあります。それらを次のように呼びます: W、S & E :p そして、Abstract 属性 (docUnit) のいくつかのクラス: W の場合は WD、S の場合は SD、E の場合は ED :)
パラメータを考えて、メイン コントローラで良いクラスをインスタンス化したいと思います。ジェネリックコードが欲しいのですが、良いプロセスを考慮して特定のクラスで作業しています。
そんな感じ。
@Component("mainVm")
@Scope("prototype")
public class MainVm {
@Autowired
private DocManFactory docManFactory;
// ???
private AbstractDocMan docMan;
...
public void setProcess(String myProcess) {
docMan = docManFactory.getDocMan(myProcess);
}
}
とりあえず、奇妙に定義されたファクトリがあります。それは機能していますが、良い習慣だとは思いません:
public class DocManFactory {
@Autowired
private S s;
@Autowired
private W w;
@Autowired
private E e;
@Autowired
private SD sd;
@Autowired
private WD wd;
@Autowired
private ED ed;
public AbstractDocMan getDocMan(String myProcess) {
AbstractDocMan adm = null;
if ("S".equals(myProcess)) {
s.setDocUnit(sd);
adm = s;
} else if ("W".equals(myProcess)) {
w.setDocUnit(wd);
adm = w;
} else if ("E".equals(myProcess)) {
e.setDocUnit(ed);
adm = e;
}
return adm;
}
}
だから私の質問: - 良い docUnit をファクトリに動的に注入する方法は? ここですべてのオブジェクトがインスタンス化されます (s、e、w、sd、ed、wd) zzz - メイン コントローラーで属性に注釈を付ける方法はありますか?
では... Spring (v3.1.1) で良い工場を作る方法。
ありがとうございました。