Spring中scope属性singleton和prototype使用的区别
来源:互联网 发布:网络直播培训 编辑:程序博客网 时间:2024/06/10 22:03
在做关于SSM框架整合的报告时,突然想到了这个问题,当时凭着记忆给大家介绍了一下,singleton是单例的模式,在spring中默认是singleton的,也就是在spring 容器中只有一个bean对象,所有的请求都有这个bean来处理,prototype是多例的模式,声明了prototype后,spring容器,会为每一个请求创建一个bean对象,也就是说容器中会有很多bean对象。
下面是报告结束后,在网上查找到的准确的答案,感谢作者:http://www.juziku.com/zhouchao/wiki/4036.htm Maybe不是原作~哈,我又在你的基础上加了一些自己的思考:
bean里面的scope 是用来配置 spring bean 的作用域的,它标识 bean 的作用域。在spring2.0之前,只有两种形式的作用域:即singleton和prototype(non-singleton);而在spring2.0以后,又增加了3个专门用于web应用程序的上下文作用域:session,request,global session.
1.singleton.当作用域被设置为singleton时,spring IOC容器中就只存在一个共享的bean实例,并且只要是bean请求,当查找到的id或name匹配时,就会将这个共享实例返回。这个单例被存储到单例缓存(singleton cache)中,并且所有针对该bean的请求和引用都会返回缓存的这个实例对象,也就造成了不安全性。
2.prototype.当作用域被设置为prototype时,spring IOC容器,根据每一次请求都会产生一个新的bean实例,请求的内容包括一:直接调用容器的getbean();二:被注入到另一个bean中。有一点需要注意的是:spring文档中指出:清除 prototype作用域的对象 并释放 任何prototype bean所持有的昂贵资源,都是客户端代码的职责。这里的客户端代码是针对spring框架而言的,指的是使用了spring框架开发应用的程序员写的代码。具体的来说,清除 prototype作用域的对象的工作是有JVM帮我们完成的,比如当前应用程序的运行超出了bean的作用域。而释放 任何prototype bean所持有的昂贵资源 的工作是要程序员手动完成的,比如我们使用了文件流后要close文件流,使用了连接后要关闭连接。
1
<
web-app
>
2
...
3
<
listener
>
4
<
listener-class
>org.springframework.web.context.request.RequestContextListener</
listener-class
>
5
</
listener
>
6
...
7
</
web-app
>
01
<
web-app
>
02
..
03
<
filter
>
04
<
filter-name
>requestContextFilter</
filter-name
>
05
<
filter-class
>org.springframework.web.filter.RequestContextFilter</
filter-class
>
06
</
filter
>
07
<
filter-mapping
>
08
<
filter-name
>requestContextFilter</
filter-name
>
09
<
url-pattern
>/*</
url-pattern
>
10
</
filter-mapping
>
11
...
12
</
web-app
>
<
bean
id
=
"role"
class
=
"xxx"
scope
=
"request"
/>
<
bean
id
=
"role"
class
=
"xxx"
scope
=
"session"
/>
5
.global session.global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet(一款java的web组件)的web应用中才有意义。Portlet规范定义了全局Session的概念,它被所有构成某个 portlet web应用的各种不同的portlet所共享。在global session作用域中定义的bean被限定于全局portlet Session的生命周期范围内。如果你在web中使用global session作用域来标识bean,那么web会自动当成session类型来使用。
<
bean
id
=
"role"
class
=
"xxx"
scope
=
"global session"
/>
- Spring中scope属性singleton和prototype使用的区别
- spring 中scope的singleton和prototype区别
- spring中scope的singleton和prototype区别
- spring中scope的singleton和prototype区别
- spring配置文件中bean中scope属性prototype和singleton
- Spring 受管理 Bean scope 的 prototype 和 singleton 区别
- spring 中属性scope 的prototype(有状态)和singleton(无状态)
- spring 中属性scope 的prototype(有状态)和singleton(无状态)
- spring 中属性scope 的prototype(有状态)和singleton(无状态)
- Spring中scope singleton 和 prototype详解
- Spring中Bean的scope的singleton和prototype使用场景
- SPRING中属性SCOPE的prototype是什么意思
- SPRING中属性SCOPE的prototype是什么意思
- SPRING中属性SCOPE的prototype是什么意思
- SPRING中属性SCOPE的prototype是什么意思
- SPRING中属性SCOPE的prototype是什么意思
- SPRING中属性SCOPE的prototype是什么意思
- SPRING中属性SCOPE的prototype是什么意思
- MC新手入门(五十)------服务器连接 一
- HDU 4288 && Codeforces 85D (线段树+离散化+离线处理)
- 关于NavigationBar的View的一些设置
- 努力成为优秀的工程师
- [x264] fps与timebase, num与den
- Spring中scope属性singleton和prototype使用的区别
- 项目中AppDelegate详解
- Windows多线程编程
- 使用4G的U盘和UltraISO工具安装Win8系统
- tomcat javaweb开发基础( 9 servlet(2))
- MC新手入门(五十一)------服务器连接 二
- javascript回调函数
- VLC 串流
- win7 0xc000000e bcdedit 无法打开启动配置数据存储 系统找不到指定的文件