struts+spring action應配置爲scope="prototype"

<bean id="personAction" scope="prototype" class="quickstart.action.PersonAction">
        <constructor-arg ref="personService" />
</bean>
在配置文件中,bean默認是單例模式,應用服務器啓動後就會立即創建bean,以後就可以重複使用。
這帶來一個問題,bean的全局變量被賦值以後,在下一次使用時會把值帶過去。也就是說,bean是有狀態的。
在web狀態下,請求是多線程的,全局變量可能會被不同的線程修改,尤其在併發時會帶來意想不到的bug。
而在開發時,訪問量很小,不存在併發、多線程的問題,程序員極有可能會忽視這個問題。
所以在配置action bean時,應使用scope="prototype",爲每一次request創建一個新的action實例。這
符合struts2的要求,struts2爲每一個request創建一個新的action實例。當request結束,bean就會被jvm
銷燬,作爲垃圾收回。
當然,也可以設置scope="session",也能避免web中action的併發問題,只爲當前用戶創建一次bean,直至
session消失。在這種情況下,對當前用戶而言,bean是有狀態的。好處就是少創建bean的實例,有那麼一
點點性能的提升
應用場景:
    1. 多數情況下應使用prototype
    2. 若用戶不多,且頻繁操作(頻繁使用action),硬件一般,可以考慮session,興許還能提升一點點性能。
轉自:http://www.cnblogs.com/JemBai/archive/2010/11/10/1873954.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章