我有需要的一類春豆運行初始化參數
- 依賴注入它採用
- 用於初始化運行參數,各種豆類
類將類似於此
東西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
}
}
什麼是各種選項,通過它我可以def在上面的類中作爲spring bean(爲了利用依賴注入)並且確保調用者在調用任何performTask *()方法之前調用initialize()?
注 - 我知道Object getBean(String name, Object... args) throws BeansException;
,但它不好看,因爲我們會失去類型安全。還有其他建議嗎?
更新 - 解決方案提到here與查找方法注射是一個不錯的選擇。在春天實施之前,您對以下使用內部類別的替代方法有何看法:
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);
這種方法的缺點是什麼?
你可以使用一個工廠bean,或者只是使用初始化,而不是使用構造函數,並在spring xml中爲構造函數提供參數。 –
如何使用運行時的值初始化bean(因爲xml意味着對值進行硬編碼..) –
改變一個singleton bean的狀態可能會導致線程問題,並且不鼓勵,也許你應該更好地解釋你的情況,爲什麼你需要在運行時改變它們。包含狀態被標記爲原型,所以每次被請求時都會被創建。使用工廠bean,您可以將這些值設置爲創建時需要的值。 –