struts+spring action應配置為scope="prototype"(轉)

langgufu314發表於2012-04-01

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,興許還能提升一點點效能。

相關文章