Spring框架Bean对象的五个作用域

打印 上一主题 下一主题

主题 878|帖子 878|积分 2634

 一、前言:Bean对象简介

在Spring项目中,那些由Spring IoC容器所管理的对象,称为bean。简单地讲,bean就是由Spring容器初始化、装配及管理的对象,除此之外,bean就与应用程序中的其他对象没有什么区别了。 而bean定义以及bean相互间的依赖关系将通过设置元数据来描述。
上一段描述简析: spring的bean对象和平凡java对象的区别就是spring的bean对象由spring创建,spring容器管理,spring实现装配(注入)。 平凡java对象是指没有使用spring框架时,创建,管理,装配(注入)是由开辟职员本身完成的。
二、Bean对象的5个作用域:

   编程职员可以控制bean对象的作用域(就是bean对象的作用范围)。重要就是控制某个bean对象的可用范围。
1.Prototype(原型模式)的效果是每次服务端用getBean方法获取同一个类的bean对象时都会创建一个新的bean对象。(prototype模式不会共享bean对象的状态,适用于每次操作的Bean对象都是不同状态的环境大概需要频仍创建新实例的环境)
2.而第二种request模式的效果是每次客户端发出Http请求才创建一个bean对象。 相比较而言Prototype原型模式会相对更频仍的创建对象,而request模式是一次复杂Http请求处理完毕,第二次Http请求才创建一个新的同类型的bean对象(request模式下:每个bean对象对于一个Http请求是唯一的)。  举例:Prototype原型模式就相当于吃花生豆,每次张嘴吃的都是不同的花生豆。  Request模式就相当于小孩吃大饼干,一次吃大饼干一次请求吃的是同一个饼干(直到饼干吃完了,小孩再向大人发起第二次请求才会吃到第二块饼干)。 
3.session模式相比较request模式而言,request模式创建bean对象会相对更加频仍。 因为request是客户端每次发出Http请求都会创建一个新的bean对象。而session模式指的是客户端和服务端一次通信完毕。此客户端在一段有用的时间内没有再发出请求则都属于一个session范围,不会创建第二个bean对象(在此有用的时间内客户端可以发出多次Http请求)。 所以session模式比request模式的bean对象作用域更大,bean对象创建频率相对较少。 举例:session模式就相当于小孩吃一锅米饭,在吃同一顿饭的时间内,小孩向大人发出多次吃饭请求,吃的都是同一锅饭(直到这顿饭吃饭,到下一次吃饭的会话才会制造第二锅饭)(session模式是同一个会话内多次请求使用的是同一个bean对象,同一个吃饭时间内多次舀饭,舀的是同一锅饭)(适用于生存用户特定的数据或状态)。
   4.Golobal Session模式:在整个Portlet规范的web项目中,只会创建一个全局会话的Bean对象(一个Portlet规范的web项目保持一个bean对象)。注意:spring项目中没有Golobal Session模式。 举例: 饭店卖饭,多个家庭可以都吃一锅内的饭, 而且一锅饭可以卖好几顿(比如一大锅稀饭,早上中午都售卖)Golobal Session模式比session模式的作用域更大。 (Golobal Session模式对应一个项目一个类只有一个bean对象, 而session模式是一个项目内同一个客户端在某个有用的时间内访问的是同一个bean对象)
  5.singleton模式:同一个bean对象在同一个spring容器中只创建一份儿。Bean对象是全局共享的,适用于无状态的Bean大概需要在多个组件之间共享数据的环境。 我的理解:和上边的Golobal Session模式类似(设置了singleton模式的bean对象,在一个web项目中只有一份儿)
 
此中request、session、和golobalSession三种模式只适用于WebApplica
tionContext上下文环境(就是只适用于web项目)。 而singleton和prototype两个作用域适用于任何类型的项目。
 
五大作用域范围对比


 
总结, 5种作用域的大小:  prototype < request < session < golobal session < singleton  
我的理解: 在spring项目中只需要记忆prototype < request < session  < singleton因为golobal session不适用于spring项目,而且我认为golobal session 和 singleton都是在一个项目中只保留一个bean对象。
By  zhaoYongQi      2024/03/07  17:37
 
 
 
三、知识点精简:

以内内容的来源于网络,文章链接如下(如有冒犯,请留言):
https://blog.csdn.net/qq_62262918/article/details/135360689
下面是网上一篇比较精简的文章,方便快速理解:
1.Singleton(单例):默认的作用域

在整个应用程序中只创建一个Bean实例。
所有对该Bean的请求都将返回同一个实例。
Bean是全局共享的,适用于无状态的Bean大概需要在多个组件之间共享数据的环境。

2.Prototype(原型)


每次对Bean的请求都会创建一个新的实例。
没有共享状态,适用于有状态的Bean大概需要频仍创建新实例的环境

3.Request(请求)
在每个HTTP请求中创建一个新的Bean实例。
每个请求的Bean实例对于该请求是唯一的。
仅在Web应用程序的上下文中有用,适用于处理HTTP请求的控制器或服务。

4.Session(会话)
在每个用户会话(Session)中创建一个新的Bean实例。
对于同一用户的所有请求,都将使用相同的Bean实例。
仅在Web应用程序的上下文中有用,适用于生存用户特定的数据或状态。

5.Global Session(全局会话)
在整个应用程序的全局会话中创建一个新的Bean实例。
仅在基于Portlet的Web应用程序中有用,通常与Portlet会话一起使用。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

不到断气不罢休

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表