必要なクラスがあります
- 使用するさまざまな Bean の依存性注入
- 初期化の実行時パラメータ
クラスはこれに似たものになります
public class Validator {
@Autowired
private ServiceA serviceA;
@Autowired
private ServiceB serviceB;
private String s;
private ClassA a;
private ClassB b;
public void initialize(String s, ClassA a, ClassB b) {
this.s = s;
this.a = a;
this.b = b;
}
public void performTaskA() {
//use serviceA, serviceB, s, a and b
}
public void performTaskB() {
//use serviceA, serviceB, s, a and b
}
public void performTaskC() {
//use serviceA, serviceB, s, a and b
}
}
上記のクラスをSpring Beanとして定義し(依存性注入を利用するため)、呼び出し元が performTask*() メソッドを呼び出す前に initialize() を呼び出すようにするためのさまざまなオプションは何ですか?
注 - 認識しObject getBean(String name, Object... args) throws BeansException;
ていますが、型の安全性が失われるため、見栄えがよくありません。他の提案はありますか?
更新 -ここで言及されているルックアップ メソッド インジェクションを使用したソリューションは、優れたオプションです。春に実装されるまで、内部クラスを使用する以下の代替案についてどう思いますか
public class MyService {
private ServiceA serviceA;
private ServiceB serviceB;
public class DataClass {
private Integer counter;
public DataClass(Integer counter) {
this.counter = counter;
}
public Integer performActionAndGetCount() {
serviceB.performAction();
return this.counter++;
}
}
}
//client module
MyService service = beanFactory.getBean("myService");
MyService.DataClass dataClass = service.new DataClass(1);
このアプローチの欠点はありますか?