需要在乙個單例物件a中使用多例成員變數b。
如果僅僅在多例中加上@scope(value = configurablebeanfactory.scope_prototype)
,由於a是乙個單例,所以無論如何b都是乙個單例。
在單例a中有乙個b類成員變數,b類通過@scope(value = configurablebeanfactory.scope_prototype
, proxymode = scopedproxymode.target_class)註解標註這個類在a中是乙個多例實現。這時候即使a是乙個單例,b也會是乙個多例
。b中定義了乙個inita(…)方法,初始化了b的成員變數,最終返回this。接著再次呼叫a的test()方法。
偽**如下:
@component
public
class
apublic
void
test01()
加了註解proxymode = scopedproxymode.target_class
後,通過原始碼跟蹤發現每次呼叫b類中的方法時,觸發aop機制,將this用乙個新物件替換掉了,導致最終呼叫inita(…)得到的物件和呼叫test()的物件不是同乙個,導致後面新的物件沒有經過初始化,執行邏輯就會有問題。
小結一下
不加proxymode = scopedproxymode.target_class
註解,單單使用@scope(value = configurablebeanfactory.scope_prototype)
導致在單例a中b也一直是單例,因為a只初始化一次。
加入proxymode = scopedproxymode.target_class
本質上加入了aop機制,對b類的方法呼叫前,都會建立新的物件,這就導致了無法使用同乙個物件連續兩次呼叫b類方法。
b類使用@scope(value = configurablebeanfactory.scope_prototype)
註解標註,那怎麼解決b一直是個單例的問題呢?
在spring中使用quartz
好吧!我承認我對quartz並不熟悉,這種境況需要通過學習它,使用它去改變。先記錄下最進在spring中使用quartz的經驗。spring中提供了對quartz的支援,使得在spring使用quartz變得很容易,只需要在配置檔案中進行配置就行了。當然在路徑中要加入相應的jar包,我用的是quar...
在Spring中使用JMS
spring對jms進行封裝,使用起來更簡單。以下給出範例 供參考!在spring中可以用jmstemplate物件來傳送 接收訊息。1 連線工廠 在非web ejb容器中使用pool時,要手動stop,spring不會為你執行destroy method的方法。如果使用了pooledconnect...
在Spring中使用Quartz進行任務排程 1
概述 各種企業應用幾乎都會碰到任務排程的需求,就拿論壇來說 每隔半個小時生成精華文章的rss檔案,每天凌晨統計論壇使用者的積分排名,每隔30分鐘執行鎖定使用者解鎖任務。對於乙個典型的mis系統來說,在每月1號凌晨統計上個月各部門的業務資料生成月報表,每半個小時查詢使用者是否已經有快到期的待處理業務 ...