我需要一個服務(單身符合)與一些內部字段,如待處理線程列表(是的一切都寫成線程安全)問題是,如果我@autowire
這個bean,字段似乎是空的。調試我發現代理正確地綁定到實例(字段CGLIB$CALLBACK_X
正確鏈接到填充的bean)並填充字段,但它提供的字段爲空。春天單身豆字段不填充
以下幾行代碼給出了我正在談論的一般概念。
@Service
public class myService{
@Autowired
private Monitor monitor;
public List getSomething(){
return monitor.getList();
}
}
@Service
public class myStatefulService{
//This field will be populated for sure by someone before getSomething() is called
private List list;
public synchronized List getSomething(){
return this.list;
}
//Called by other services that self inject this bean
public synchronized void addToList(Object o){
this.list.add(o);
}
}
中的GetList通話過程中調試變量monitor
我得到
monitor => instance of correct class
fields:
CGLIB$BOUND => true
CGLIB$CALLBACK_0.advised => proxyFactory (correct)
CGLIB$CALLBACK_1.target (reference to the correct instance of myStatefulService class)
fields:
list => [.........] (correctly populated)
CGLIB$CALLBACK_2 .....
......
......
......
list => [] (the list that would be populated is empty instead)
對不起,列表中的@autowired是一個打字錯誤....一切都在Spring的控制之下,「某人」是一種響應客戶端動作的其他服務......所以客戶端使用其他服務向列表添加元素。帶有列表的服務包含邏輯並定期在列表上工作,所以我需要成爲一個singleton可注入有狀態bean =) – Gnappuraz 2012-07-20 14:22:18
是的,我提供了添加元素到列表的方法,但是當列表被讀取時它也是空的,如果代理指向的實例已正確填充它。 – Gnappuraz 2012-07-20 14:29:01
爲什麼你需要一個代理?我會說這是一個不需要由Spring控制的對象的例子。只是實例化一個新的並繼續下去。 – duffymo 2012-07-20 16:50:26