1. 程式人生 > >為什麼整合Spring與Struts2的時候,必須定義Struts2 Bean的Scope

為什麼整合Spring與Struts2的時候,必須定義Struts2 Bean的Scope

Struts2 本身是執行緒安全的,在預設的情況下會為每一個請求建立一個例項物件,這在一定程度上解決了servlet帶來的執行緒安全的問題。

Struts2的Bean在交給Spring IOC管理後,預設使用的是單例,所有請求使用同一Action,當Action中定義一些變數以接受引數時,或者進行驗證時,往往會出現執行緒安全問題。

比如:

         Struts2的Action是單例,其中的FieldError,actionerror中的錯誤資訊會累加, 即使再次輸入了正確的資訊,也過不了驗證

        Action中定義了User物件,請求A提交表單,填充User物件,請求B判斷Action中User物件是否為空,不為空則載入(此時B請求所對應的User物件並未載入)

        等等等等....

所以在Spring 整合Struts2的時候,記得將Struts2 Bean 的Scope設定成prototype哦大笑

@Controller
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public class UserAction extends ActionSupport {