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

这篇具有很好参考价值的文章主要介绍了Spring框架Bean对象的五个作用域。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 一、前言: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对象<如果超出这个有效时间此客户端访问本项目时,同一个bean对象会创建不同的bean对象>)

  5.singleton模式:同一个bean对象在同一个spring容器中只创建一份儿。Bean对象是全局共享的,适用于无状态的Bean或者需要在多个组件之间共享数据的情况。 我的理解:和上边的Golobal Session模式类似(设置了singleton模式的bean对象,在一个web项目中只有一份儿)

 

其中request、session、和golobalSession三种模式只适用于WebApplica

tionContext上下文环境(就是只适用于web项目)。 而singleton和prototype两个作用域适用于任何类型的项目。

 

五大作用域范围对比

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

 

总结, 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会话一起使用。文章来源地址https://www.toymoban.com/news/detail-837896.html

到了这里,关于Spring框架Bean对象的五个作用域的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Bean 的作用域(Bean Scope)

    大家好,我是 god23bin,今天我们来聊一聊 Spring 框架中的 Bean 作用域(Scope)。 我们在以 XML 作为配置元数据的情况下,进行 Bean 的定义,是这样的: 我们写了一个 Bean 定义(Bean Definition),就是用于创建所定义的类的实例的。 一个 Bean 定义,我们可以类比一个类的定义,你

    2024年02月09日
    浏览(29)
  • 【Spring】Bean的作用域

    根据 【动力节点】最新Spring框架教程,全网首套Spring6教程,跟老杜从零学spring入门到高级 以及老杜的原版笔记 https://www.yuque.com/docs/share/866abad4-7106-45e7-afcd-245a733b073f?# 《Spring6》 进行整理, 文档密码:mg9b Spring 相关文章整理汇总归纳于:https://www.yuque.com/u27599042/zuisie singleto

    2024年02月14日
    浏览(35)
  • Spring Bean 作用域的定义

            在 Spring 配置中,我们可以通过 scope 属性来定义 Spring Bean 的作用域,可以接受 5 个内建的值,分别代表 5 种作用域类型,下面给大家详细总结一下: 1、singleton,用来定义一个 Bean 为单例,也就是说在 Spring loC 容器中仅有唯一 的一个实例对象,Spring 中的 Bean 默认

    2024年02月12日
    浏览(29)
  • Spring中Bean的作用域和Spring生命周期

    从前面的文章中我们看出Spring是用来存储和读取Bean的,因此Spring中Bean是最核心的资源,所以我们将对Bean进行深入的理解。 现在有一个公共的Bean,提供给了两个用户去使用,但是在使用过程中,用户一修改了公共的Bean数据,当用户2在使用时,却发现产生了逻辑上的错误。

    2024年02月16日
    浏览(34)
  • Spring Bean作用域与生命周期

    目录 Bean的作用域: Bean有六大行为模式 1、singleton:单例模式(默认) 2、prototype: 原型模式(多例模式) 3、request: 请求作用域(Spring MVC) 4、session: 会话作用域(Spring MVC) 5、application: 全局作用域(Spring MVC) 6、websocket: HTTP WebSocket 作用域(Spring WebSocket) applicationContext和singleton的区别  Bea

    2024年02月02日
    浏览(31)
  • Spring | Bean 作用域和生命周期

    Spring 是用来读取和存储 Bean,因此在 Spring 中 Bean 是最核心的操作资源,所以接下来我们深入学习⼀下 Bean 对象 假设现在有⼀个公共的 Bean,提供给 A 用户和 B 用户使用,然而在使用的途中 A 用户却 “悄悄” 地修改了公共 Bean 的数据,导致 B 用户在使用时发生了预期之外的逻

    2024年02月14日
    浏览(33)
  • Spring(Bean 作用域和生命周期)

    目录 1. 案例1: Bean作用域的问题 2. 作用域 3. 设置 Bean 的作用域 4. Spring 的执行流程 5. Bean 的生命周期 现在有一个公共的 Bean,通过给 A 用户 和 B 用户使用, 然后在使用的过程中 A 偷偷的修改了公共 Bean 的数据, 导致 B 在使用时发生了预期之外的逻辑错误 (1) 公共 Bean:   [名称是

    2024年02月19日
    浏览(86)
  • Spring Bean的作用域及生命周期

    目录 前言: Bean的作用域(Scope) 单例模式 原型模式(多例作用域) 请求作用域(request) 会话作用域 全局作用域 网络长连接 Spring执行流程 Bean的生命周期 测试 小结:     使用Spring框架时,我们需要清楚Spring托管Bean的作用域和生命周期,这样使用框架才会更加得心应手。

    2024年02月03日
    浏览(24)
  • Bean 作用域、生命周期和Spring执行流程

    假设现在有⼀个公共的 Bean,提供给 A ⽤户和 B ⽤户使⽤,然⽽在使⽤的途中 A ⽤户却“悄悄”地修改了公共 Bean 的数据,导致 B ⽤户在使⽤时发⽣了预期之外的逻辑错误。 我们可以看到,B 用户在使用这个Bean对象时,得到的Dog是被A 用户修改过的,这无疑会给 B 用户带来很

    2024年02月12日
    浏览(35)
  • 【Spring】Bean的作用域和生命周期

    目录 一、引入案例来探讨Bean的作用域 二、Bean的作用域 2.1、Bean的6种作用域 2.2、设置Bean的作用域 三、Spring的执行流程  四、Bean的声明周期 1、生命周期演示 首先我们创建一个User类,定义一个用户信息,在定义一个Users类,使用方法注解将user存入Spring中,然后两个用户A对这

    2024年02月14日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包