1. 程式人生 > >有狀態和無狀態的Servlet

有狀態和無狀態的Servlet

有狀態和無狀態的Servlet

有狀態

有狀態就是有資料的儲存功能.
有狀態物件(Stateful Bean)

有例項變數的物件,可以儲存資料,是非執行緒安全的.在不同的方法呼叫間不保留任何的狀態.
無狀態

無狀態就是一次操作,不能儲存資料.
無狀態物件(Stateless Bean)

沒有例項變數的物件,不嫩儲存資料,是不變類,是執行緒安全的.
Spring中的有狀態(Stateful)和無狀態(Stateless)

1.通過上面的分析,相信大家已經對有狀態和無狀態有了一定的理解。無狀態的Bean適合用不變模式,技術就是單例模式,這樣可以共享例項,提高效能。有狀態的Bean,多執行緒環境下不安全,那麼適合用Prototype原型模式。Prototype: 每次對bean的請求都會建立一個新的bean例項。

2.預設情況下,從Spring bean工廠所取得的例項為singleton(scope屬性為singleton),容器只存在一個共享的bean例項。

3.理解了兩者的關係,那麼scope選擇的原則就很容易了:有狀態的bean都使用prototype作用域,而對無狀態的bean則應該使用singleton作用域。

4.如Service層、Dao層用預設singleton就行,雖然Service類也有dao這樣的屬性,但dao這些類都是沒有狀態資訊的,也就是相當於不變(immutable)類,所以不影響 。Struts2中的Action因為會有User、BizEntity這樣的例項物件,是有狀態資訊,在多執行緒環境下是不安全的,所以Struts2預設的實現是Prototype模式。在Spring中,Struts2的Action中,scope要配成prototype作用域。