struts2 中action 是多例,即乙個session產生乙個action。原因是:struts 2的action中包含資料,例如你在頁面填寫的資料就會包含在action的成員變數裡面。如果action是單例項的話,這些資料在
多執行緒的環境下就會相互影響,例如造成別人填寫的資料被你看到了。
而struts 1的action是單例項的,因為它的資料儲存在form類中,多執行緒環境下,action只負責處理一些邏輯,並沒有資料,也就是大家把它當做乙個工具使用。同樣
servlet也是單例項的。
問題出現了,可以讓struts2的action變成單例模式麼?我在使用spring來生成action的時候,發現生成的action居然全是單例的。這不是讓我的程式預設就跑出bug來麼?上個使用者提交的資訊,如果下個使用者沒填,居然跑到上個使用者輸入的資訊去了。
背景 :
1) struts
2 會對每乙個請求,產生乙個action的例項來處理.
2) spring的ioc容器管理的bean預設是單例項的.
首先從資料安全性的問題上考慮,我們的action應該保證是多例的,這樣才不會出現資料問題。但是如果有的action比如只有admin才能操作,或者某些action,全站公用乙個來提高效能,這樣的話,就可以使用單例模式。
不過幸好,spring的bean可以針對每乙個設定它的scope,所以,上面的問題就不是問題了。如果用單例,就在spring的action bean配置的時候設定scope="prototype".
單例和多例
單例模式 兩種寫法 一.懶漢式 最簡單的寫法 怕多執行緒 中間的寫法 無法實現多執行緒 雙鎖的寫法 實現了執行緒安全,並保留了多執行緒。特點 1 單例類只能有乙個例項。2 單例類必須自己建立自己的唯一例項。3 單例類必須給所有其他物件提供這一例項。public class user private ...
JavaSE 單例和多例
一 單例設計模式 定義 乙個類只能允許例項化乙個物件 餓漢式單例 public class test public static test getinstance public void print 特點 立即初始化 餓漢式單例 立即載入,執行緒安全,記憶體可能會浪費 懶漢式單例 public cl...
單例和多例的區別
單例模式的物件在整個系統中只有乙份,也就是只有乙個物件,而多例模式可以有多個。在記憶體當中體現為單例模式只占用乙份儲存空間,節約伺服器資源而多例模式每次例項化都要新開闢一快記憶體 單例模式記憶體分析可參考 在應用上單例模式多用於多執行緒類業務如購票系統 秒殺系統,通過物件鎖確保物件全域性唯一,防止程...