Unexpected Multithreading on Spring2 IoC Container
目前小弟我在執行的工作案是使用Spring2 + Hibernate3 + Flex3 + BPM + Multithreading技術的環境,有一天客戶提出的Scenario是需要用到Multithreading的,因為沒有注意到Multithreading這個條件,所以,就跟以往一樣開始撰寫Java程式和設定Spring XML configuration,在整個開發過程中都有進行單元測試,而且都很順利。但是,最後進行整合測試時,竟然發現有些模組會出現前一次執行的結果,而不會產生現在所要的結果,這下可頭大了。只好從頭開始將每個可能發生錯誤的模組進行測試,結果跟開發時一樣都沒有問題,最後只好使用Debug模式一行一行Trace程式碼,就在此時發現透過Spring的IoC注入模組並不會產生新的結果,而是直接回覆舊有的資料,因此就發現到可能是這個模組被設定成Singleton模式,因此,小弟我就立刻去翻閱Spring 2的文件,在Spring BeanFactory的XML Configuration章節中有提到,所有Spring beans的內定值都是Singletons,所以,當你想要定義一個Prototype Bean,就要在 XML 的設定檔中註明 scope="prototype",範例如下:
<bean id="studentDao" class="com.spring.service.StudentDaoImpl" scope="prototype">
Reference: http://static.springframework.org/spring/docs/2.0.x/reference/index.html Read more...