(
之前在開發過程中遇到了乙個問題,當request發起下乙個請求的時候,action中的屬性值並沒有清除,而是繼續採用上次使用過的引數值進行查詢並響應,導致資料查詢不真實或失敗。對此,有同事告訴我說,需要在spring配置檔案的bean中新增屬性scope=prototype。結果還真的有用。
下面是我對spring的bean中scope屬性的一些查詢與總結:
預設情況下,從bean工廠所取得的例項為singleton(bean的singleton屬性)
singleton: spring容器只存在乙個共享的bean例項,是預設的配置。
prototype: 每次對bean的請求都會建立乙個新的bean例項。
二者選擇的原則:有狀態的bean都使用prototype作用域,而對無狀態的bean則應該使用singleton作用域。
在 spring2.0中除了以前的singleton和prototype外又加入了三個新的web作用域,分別為request、session和 global session。
如果你希望容器裡的某個bean擁有其中某種新的web作用域,除了在bean級上配置相應的scope屬性,還必須在容器級做乙個額外的初始化配置。即在web應用的web.xml中增加這麼乙個contextlistener:
org.springframework.web.context.request.requestcontextlistener 以上是針對servlet 2.4以後的版本。比如request作用域!
singleton是單態模式的 ,有ioc容器管理 ,當然不是執行緒安全的啦 ,不過所謂的執行緒安全也是相對的,如果你的類是沒有狀態的, 那用singleton 的效能要高一些 ,因為只有乙個例項 ;如果你的類是有狀態的 ,那就必須顯示的設定為prototype了。
在ssh2 專案中 , struts2的action交由spring管理的時候 ,spring預設是singleton的 ,而struts2的action顯然是有狀態的 ,所以必須顯示設定為 scope=「prototype」
prototype為原型模式 , 每次action請求過來都會建立乙個action
但是對那些dao的實現類推介scope=「singleton」 ,因為這些類沒有狀態,用singleton只需維護乙個例項,顯然效能高一些。
Spring中bean中scope屬性的意義
scope prototype 預設情況下,從 bean工廠所取得的例項為singleton bean的singleton屬性 singleton spring容器只存在乙個共享的bean例項,預設的配置。prototype 每次對bean的請求都會建立乙個新的bean例項。二者選擇的原則 有狀態的...
小談spring中的scope屬性
在一次做專案時遇到了這樣的一則警告 invocation of destroy method close failed on bean with name sqlsession html view plain copy print?bean id sqlsessiontemplate class o...
Spring中的 scope註解
預設是單例模式,即scope singleton 另外scope還有prototype request session global session作用域。scope prototype 多例 scope預設是單例模式 singleton 如果需要設定的話 scope prototype 1.sin...