轉自(http://www.cnblogs.com/zyzcj/p/5652128.html)html
struts 2的Action是多實例的並不是單例,也就是每次請求產生一個Action的對象。緣由是:struts 2的Action中包含數據,例如你在頁面填寫的數據就會包含在Action的成員變量裏面。若是Action是單實例的話,這些數據在多線程的環境下就會相互影響,例如形成別人填寫的數據被你看到了。因此Struts2的Action是多例模式的。spring
問題出現了,可讓struts2的action變成單例模式麼?我在使用spring來生成action的時候,發現生成的action竟然全是單例的。這不是讓個人程序默認就跑出bug來麼?上個用戶提交的信息,若是下個用戶沒填,竟然跑到上個用戶輸入的信息去了。瀏覽器
若是單例改爲多例,會報一個action找不到的異常,多是你在方法之中時用到的變量你沒有傳值,action報錯比較奇怪安全
Invalid action class configuration that references an unknown class named [adminLogQueryAction]多線程
檢查前臺提交參數和後臺接收值,和方法須要的值性能
背景 :spa
1) Struts2 會對每一個瀏覽器,產生一個Action的實例來處理.prototype
2) Spring的Ioc容器管理的bean默認是單實例的.線程
首先從數據安全性的問題上考慮,咱們的Action應該保證是多例的,這樣纔不會出現數據問題。可是若是有的action好比只有admin才能操做,或者某些action,全站公用一個來提升性能,這樣的話,就可使用單例模式。xml
不過幸虧,Spring的bean能夠針對每個設置它的scope,因此,上面的問題就不是問題了。若是用多例,就在spring的action bean配置的時候設置scope="prototype".好吧,問題到此結束。