spring 中属性scope 的prototype(有状态)和singleton(无状态)
默認(rèn)情況下,從bean工廠所取得的實(shí)例為Singleton(bean的singleton屬性) Singleton: Spring容器只存在一個(gè)共享的bean實(shí)例,
默認(rèn)的配置。 Prototype: 每次對(duì)bean的請(qǐng)求都會(huì)創(chuàng)建一個(gè)新的bean實(shí)例。二者選擇的原則:有狀態(tài)的bean都使用Prototype作用域
,而對(duì)無(wú)狀態(tài)的bean則應(yīng)該使用singleton作用域。
在 Spring2.0中除了以前的Singleton和Prototype外又加入了三個(gè)新的web作用域,分別為request、session和 global session。如
果你希望容器里的某個(gè)bean擁有其中某種新的web作用域,除了在bean級(jí)上配置相應(yīng)的scope屬性,還必須在容器級(jí)做一個(gè)額外的初始
化配置。即在web應(yīng)用的web.xml中增加這么一個(gè)ContextListener:
org.springframework.web.context.request.RequestContextListener 以上是針對(duì)Servlet 2.4以后的版本。比如Request作用域!
引用:http://wdlisoft.javaeye.com/blog/479049
singleton是單態(tài)模式的 ,有ioc容器管理 ,當(dāng)然不是線程安全的啦 ,不過(guò)所謂的線程安全也是相對(duì)的
如果你的類是沒有狀態(tài)的, 那用singleton 的性能要高一些 ,因?yàn)橹挥幸粋€(gè)實(shí)例 。?
如果你的類是有狀態(tài)的 ,那就必須顯示的設(shè)置為prototype了
在ssh2 項(xiàng)目中 , struts2的action交由spring管理的時(shí)候 ,spring默認(rèn)是singleton的 ,而struts2的action顯然是有狀態(tài)的 ,所以必須顯示設(shè)置為?
scope=“prototype”
prototype為原型模式 , 每次action請(qǐng)求過(guò)來(lái)都會(huì)創(chuàng)建一個(gè)action
但是對(duì)那些Dao的實(shí)現(xiàn)類推介scope=“singleton” ,因?yàn)檫@些類沒有狀態(tài),用singleton只需維護(hù)一個(gè)實(shí)例,顯然性能高一些
?
?
有狀態(tài)會(huì)話bean?? :每個(gè)用戶有自己特有的一個(gè)實(shí)例,在用戶的生存期內(nèi),bean保持了用戶的信息,即“有狀態(tài)”;一旦用戶滅亡(調(diào)用結(jié)束或?qū)嵗Y(jié)束),bean的生命期也告結(jié)束。即每個(gè)用戶最初都會(huì)得到一個(gè)初始的bean。?
無(wú)狀態(tài)會(huì)話bean?? :bean一旦實(shí)例化就被加進(jìn)會(huì)話池中,各個(gè)用戶都可以共用。即使用戶已經(jīng)消亡,bean ? 的生命期也不一定結(jié)束,它可能依然存在于會(huì)話池中,供其他用戶調(diào)用。由于沒有特定的用戶,那么也就不能保持某一用戶的狀態(tài),所以叫無(wú)狀態(tài)bean。但無(wú)狀態(tài)會(huì)話bean ? 并非沒有狀態(tài),如果它有自己的屬性(變量),那么這些變量就會(huì)受到所有調(diào)用它的用戶的影響,這是在實(shí)際應(yīng)用中必須注意的
轉(zhuǎn)載于:https://www.cnblogs.com/jxrichar/p/5240017.html
總結(jié)
以上是生活随笔為你收集整理的spring 中属性scope 的prototype(有状态)和singleton(无状态)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: css盒子模型、文档流、相对与绝对定位、
- 下一篇: MVC下HtmlHelper自带Begi