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两个作用域适用于任何类型的项目。

五大作用域范围对比

总结, 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会话一起使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/726983.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++初阶:初识C++

目录 1. 前言&#xff1a;C 与 C语言2. C对于C语言语法的完善与补充2.1 命名冲突与命名空间2.1.1 命名空间的定义2.1.2 调用方式 2.3 补充&#xff1a;流的概念2.4 缺省参数2.4.1 缺省参数的使用 2.5 函数重载2.5.1 什么是函数重载2.5.2 函数重载的使用2.5.3 特殊情况&#xff…

SpringBoot集成JSP和war包部署到Tomcat

SpringBoot集成JSP 加依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot…

MedSAM 项目排坑记录

MedSAM 项目排坑记录 任务排坑过程配置python环境测试构建docker模型训练数据预处理 单GPU训练最后推理 任务 做一个课程大作业&#xff0c;需要进行CVPR2024年医疗影像分割赛题的打榜&#xff08;CVPR 2024: SEGMENT ANYTHING IN MEDICAL IMAGES ON LAPTOP&#xff09;。看到…

docker离线搭建仓库

要在Docker中搭建本地仓库&#xff0c;可以按照以下步骤进行操作&#xff1a; 首先安装 Docker。根据不同的操作系统选择合适的版本并完成安装过程。打开命令行工具&#xff08;如Terminal或PowerShell&#xff09;&#xff0c;运行以下命令来创建一个新的容器并将其设置为本地…

vulhub中ThinkPHP 多语言本地文件包含漏洞复现

ThinkPHP是一个在中国使用较多的PHP框架。在其6.0.13版本及以前&#xff0c;存在一处本地文件包含漏洞。当多语言特性被开启时&#xff0c;攻击者可以使用lang参数来包含任意PHP文件。 虽然只能包含本地PHP文件&#xff0c;但在开启了register_argc_argv且安装了pcel/pear的环…

如何在Win系统本地部署Jupyter Notbook交互笔记并结合内网穿透实现公网远程使用

文章目录 1.前言2.Jupyter Notebook的安装2.1 Jupyter Notebook下载安装2.2 Jupyter Notebook的配置2.3 Cpolar下载安装 3.Cpolar端口设置3.1 Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 在数据分析工作中&#xff0c;使用最多的无疑就是各种函数、图表、…

2024第二届语言,教育与艺术鉴赏国际会议(ICLEAA 2024)

2024第二届语言&#xff0c;教育与艺术鉴赏国际会议&#xff08;ICLEAA 2024&#xff09; 一、【会议简介】 我们非常荣幸地邀请您参加2024第二届语言&#xff0c;教育与艺术鉴赏国际会议&#xff08;ICLEAA 2024&#xff09;&#xff0c;该会议将在美丽的苏州举行。 ICLEAA …

美团面试拷打:Redis 缓存穿透、缓存击穿、缓存雪崩区别和解决方案

目录&#xff1a; 缓存穿透 什么是缓存穿透&#xff1f; 缓存穿透说简单点就是大量请求的 key 是不合理的&#xff0c;根本不存在于缓存中&#xff0c;也不存在于数据库中 。这就导致这些请求直接到了数据库上&#xff0c;根本没有经过缓存这一层&#xff0c;对数据库造成了巨…

如何在Win系统部署Tomcat服务并实现远程访问内网站点

文章目录 前言1.本地Tomcat网页搭建1.1 Tomcat安装1.2 配置环境变量1.3 环境配置1.4 Tomcat运行测试1.5 Cpolar安装和注册 2.本地网页发布2.1.Cpolar云端设置2.2 Cpolar本地设置 3.公网访问测试4.结语 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的人工智能学…

AIOps常见问题

AIOps的自动化通常指什么&#xff1f; AIOps 平台的自动化一般包括以下几个方面&#xff1a; 数据收集和整合&#xff1a;AIOps 平台可以从多个 IT 基础架构组件、应用需求与性能监视工具以及服务工单系统等数据源中收集并整合运维数据&#xff0c;形成一个全面的数据平台。数…

YOLOv9电动车头盔佩戴检测,详细讲解模型训练

向AI转型的程序员都关注了这个号&#x1f447;&#x1f447;&#x1f447; 一、YOLOv9简介 YOLOv9是YOLO系列算法的最新版本。YOLO系列算法自2015年首次提出以来&#xff0c;已经在目标检测领域取得了显著的进展&#xff0c;以其快速和准确的特点而广受欢迎。 论文地址&#xf…

CentOS网络故障排查秘笈:实战指南

前言 作为一名热爱折腾 Linux 的技术达人&#xff0c;我深知网络故障会让人抓狂&#xff01;在这篇文章里&#xff0c;我和你分享了我的心得体会&#xff0c;从如何分析问题、识别瓶颈&#xff0c;到利用各种神器解决网络难题。不管你是新手小白还是老鸟大神&#xff0c;这里都…

凌鲨微应用开发流程

微应用开发流程 使用vite,nextjs等框架创建前端项目引入需要的api包通过调试界面进行调试 创建前端项目 vite yarn create vitenextjs yarn create next-app引入需要的api包 名称权限说明http跨域访问跨域http访问tauri提供的apilinksaas-minapp/api打开浏览器读本地文件…

【经验分享】 3D新手玩转VisionPro的工作流

第一步:文字生产图片 这样的工具有很多,stable diffusion,Midjourney等来生成图像 第二步:使用图片生3d模型工具 在线的工具有:https://huggingface.co/spaces/stabilityai/TripoSRhttps://huggingface.co/spaces/stabilityai/TripoSR 效果图 代码框架:Gi

CentOS7.9基于Apache2.4+Php7.4+Mysql8.0架构部署Zabbix6.0LTS 亲测验证完美通过方案

前言: Zabbix 由 Alexei Vladishev 创建,目前由 Zabbix SIA 主导开发和支持。 Zabbix 是一个企业级的开源分布式监控解决方案。 Zabbix 是一款监控网络的众多参数以及服务器、虚拟机、应用程序、服务、数据库、网站、云等的健康和完整性的软件。 Zabbix 使用灵活的通知机制,…

蓝桥杯-排序

数组排序 Arrays.sort(int[] a) 这种形式是对一个数组的所有元素进行排序&#xff0c;并且时按从小到大的顺序。 package Work;import java.util.*;public class Imcomplete {public static void main(String args[]) {int arr[]new int [] {1,324,4,5,7,2};Arrays.sort(arr)…

安装系统后,如何单个盘空间扩展多个盘空间?

1、计算机-管理-存储-磁盘空间 2、压缩C盘符&#xff0c;分出多余空间 3、将多余空间扩展&#xff0c;然后修改盘符名称

SpringBoot自动装配详解

SpringBoot自动装配 在讲之前先了解一下&#xff0c;手动装配的流程。 在没有Spring Boot的情况下&#xff0c;你需要手动配置和添加相关依赖&#xff0c;以实现类似于Spring Boot自动装配的功能。主要步骤&#xff1a; 引入Spring相关依赖&#xff1a; 首先&#xff0c;你需…

基于springboot+vue实现食品安全管理系统项目【项目源码+论文说明】

基于springboot实现食品安全管理系统演示 摘要 食品行业同其他行业有很多的差别&#xff0c;食品行业不仅要管食品的生产和销售&#xff0c;还要管食品的库存和保质期&#xff0c;那么对于食品管理者来说&#xff0c;就存在着一定的难度。况且食品的种类复杂&#xff0c;存储条…

Redis分段锁,如何设计?

问题场景&#xff1a;热点库存扣减问题 秒杀场景&#xff0c;有一个难度的问题&#xff1a;热点库存扣减问题。 既要保证不发生超卖 又要保证高并发 如果解决这个高难度的问题呢&#xff1f; 答案就是使用redis 分段锁。 什么是分布式锁&#xff1f; 一个分布式系统中&am…