Spring中 Bean 的六种作用域官方说明

 在 Spring 中有6种 Bean 作用域,分别为:

    1、singleton(单例作用域)

    2、prototype(原型作用域)

    3、request(请求作用域)

    4、session(会话作用域)

    5、application(全局作用域)

    6、websocket(HTTP WebSocket 作用域

下面展示这六种作用域的官方说明和使用场景等信息

1、singleton(单例作用域)

  • 官方说明:(Default)Scopes a single bean definition to a single object instance for each Spring IoC container.
  • 描述:该作用域下的 Bean 在Ioc容器中只存在一个实例,即 获取 Bean (通过 applicationContext.getBean 等方法获取)和 装配 Bean (通过 @Autowired 注入)都是同一个对象。
  • 场景:通过无状态的 Bean 使用该作用域。(无状态:表示 Bean 对象的属性状态不需要更新)
  • 备注:Spring 默认选择该作用域(性能最优)

2、prototype(原型作用域)

  • 官方说明:Scopes a single bean definition to any number of object instances.
  • 描述:每次对该作用域下的 Bean 的请求都会创建新的实例,即 获取 Bean (通过 applicationContext.getBean 等方法获取)和 装配 Bean (通过 @Autowired 注入)都是新的对象。
  • 场景:通常有状态的 Bean 使用该作用域

3、request(请求作用域)

  •  官方说明:Scopes a single bean definition to the lifecycle of a single HTTP request. That is, each HTTP request has its own instance of a bean created off the back of a single bean definition. Only valid in the context of a web-aware Spring ApplicationContext.
  • 描述:每次 http 请求会创建新的 Bean 实例,类似于 prototype
  • 场景:一次 http 的请求和响应的共享同一个 Bean
  • 备注:限定 SpringMVC 中使用

4、session(会话作用域)

  • 官方说明:Scopes a single bean definition to the lifecycle of an HTTP Session. Only valid in the context of a web-aware Spring ApplicationContext.
  • 描述:在一个 http session 中,定义一个 Bean 实例
  • 场景:用户会话共享同一个 Bean(例如记录一个用户的登陆信息)
  • 备注:限定 SpringMVC 中使用

5、application(全局作用域)

  •  官方说明:Scopes a single bean definition to the lifecycle of a ServletContext. Only valid in the context of a web-aware Spring ApplicationContext.
  • 描述:在一个 http servlet Context 中,定义一个 Bean 实例
  • 场景:Web 应用的上下文信息(例如记录一个应用的共享信息)
  • 备注: 限定 SpringMVC 中使用

 单例作用域(singleton)和 全局作用域(application)对比:

1. singleton 是 Spring Core 的作用域;application 是 Spring Web 中的作用域; 

2. singleton 作用于 IoC 的容器,而 application 作用于 Servlet 容器。

6、websocket(HTTP WebSocket 作用域)

  •  官方说明:Scopes a single bean definition to the lifecycle of a WebSocket. Only valid in the context of a web-aware Spring ApplicationContext.
  • 描述:在一个 HTTP WebSocket 的生命周期中,定义一个 Bean 实例。
  • 场景:WebSocket 的每次会话中,都保存一个 Map 结构的头信息,将用来包裹客户端信息头。第一次初始化后,直到 WebSocket 结束都是同一个 Bean。
  • 备注: 限定 Spring WebSocket 中使用

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

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

相关文章

如何在 Linux 系统中查看系统日志

Linux 系统提供了强大的日志功能,可以记录系统和应用程序的各种事件和错误信息。系统日志对于故障排除和性能监控非常重要。 图片 一、使用命令行工具查看系统日志 使用 journalctl 命令查看系统日志:journalctl 命令是 systemd 日志管理器的客户端工具,它可以查看 system…

软件测试知识总结

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号:互联网杂货铺,回复1 ,免费获取软件测试全套资料,资料在手,涨薪更快 1、黑盒测试、白盒测试、灰盒测试 1.1 黑盒测试 黑盒测…

【c++ debug】记一次protobuf结构相关的coredump问题

文章目录 1. 问题现象2. 问题描述3. 问题分析4. 问题根因5. 问题修复6. 补充:类成员变量定义为引用类型 1. 问题现象 其中curr_lanes是一个目标上一帧的当前车道current_lanes_curr_lane是lane_id对应的LaneInfo信息现象:在lane_info->lane().success…

Stackoverflow(1)-根据RequestBody的内容来区分使用哪个资源

如果使用Spring,可以通过RequestBody将请求体的json转换为Java对象,但如果URI相同,而请求体的内容不同,应该怎么办?问题来源(stackoverflow):Spring RequestBody without using a pojo?稍微研究了一下&…

浅析Linux设备驱动:IO端口和IO内存

文章目录 概述IO端口和IO内存的区别 IO资源管理IO资源类型IO端口资源IO内存资源 IO资源分配 IO端口访问IO端口操作函数 IO内存访问IO内存操作函数 相关参考 概述 在计算机系统中,外部设备通常会提供一组寄存器或内存用于处理器配置和访问设备功能。这些寄存器或内存…

由斐波那契数列探究递推与递归

斐波那契数列定义: 斐波那契数列大家都非常熟悉。它的定义是: 对于给定的整数 x ,我们希望求出: f ( 1 ) f ( 2 ) … f ( x ) f(1)f(2)…f(x) f(1)f(2)…f(x) 的值。 有两种方法,分别是递推(迭代)与递归 具体解释如下图 备注…

JDBC核心技术

第1章 JDBC概述 第2章 获取数据库连接 第3章 使用PreparedStatement实现CRUD操作 第4章 操作BLOB类型字段 第5章 批量插入 第6章 数据库事务 第7章 DAO及相关实现类 第8章 数据库连接池 第9章 Apache-DBUtils实现CRUD操作图像 小部件

蜂蜜器实验-驱动代码测试

一. 简介 上一篇文章实现了蜂鸣器驱动代码,实现关闭蜂鸣器与打开功能。文章地址如下: 蜂鸣器驱动代码完善-CSDN博客 本文对所实现的蜂鸣器驱动代码进行测试。 二. 蜂鸣器驱动代码测试 1. 准备应用程序 这里应用程序还使用 前面实现所使用的Led应用…

学习数据接构和算法的第10天

题目讲解 尾插 #include <stdio.h> #include <stdlib.h> // 定义顺序表结构 #define MAX_SIZE 100 struct ArrayList {int array[MAX_SIZE];int size; // 当前元素个数 }; // 初始化顺序表 void init(struct ArrayList *list) {list->size 0; // 初始时元素个…

秒级到毫秒级的跨越—一次慢SQL优化历险

一次慢 SQL 优化过程 一、背景 对于公司内部的一个发票管理系统&#xff0c;财务人员经常需要对发票的开票交易进行查询&#xff0c;这里涉及到两张表&#xff1a;发票订单表和发票信息表&#xff0c;我们需要查询订单 ID、开票 APP、开票主体、订单类型、支付渠道、支付总额…

洛夫克拉夫特“克苏鲁神话”艺术风格探索(二)

三、多元的叙事风格 洛夫克拉夫特的克苏鲁神话作为当时独特的文学创造&#xff0c;有独特的叙事特征[8]。 一是侦探小说不稳定的叙事。最有名气的早期侦探小说是爱伦坡的《莫格街凶杀案》&#xff0c;并产生了“疑案”的经典设定&#xff0c;两次世界大战期间的侦探小说批评认…

Python re.findall()中的正则表达式包含多个括号时的返回值——包含元组的列表

当re.findall()中的正则表达式包含多个括号时&#xff0c;返回值是一个列表&#xff0c;其中每个元素都是一个元组。这个元组的长度与正则表达式中括号的数量相同&#xff0c;元组中的每个元素都是与相应括号中的模式匹配的文本。 import re # 定义一个包含三个括号的正则表达…

牛客周赛33

第一题&#xff1a;小红的单词处理 小红拿到了用空格隔开的两个单词。她希望你先输出第二个单词&#xff0c;再输出第一个单词。你能帮帮她吗&#xff1f; 利用c/c的特性自动忽略空格 #include<iostream> using namespace std; int main(){string a,b;cin>>a>…

《UE5_C++多人TPS完整教程》学习笔记18 ——《P19(实现子系统函数)创建会话(Create Session)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P19 &#xff08;使用子系统函数&#xff09;创建会话&#xff08;Create Session&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&am…

基于Java SSM框架实现疫情防控系统项目【项目源码】

基于java的SSM框架实现疫情防控系统演示 Java技术 Java技术它是一个容易让人学会和使用的一门服务器语言。它在编程的过程当中只需要很少的知识就能建立起一个真正的交互站点。对于这个教程来说它并不需要你完全去了解这种语言&#xff0c;只要能快速融入web站点就可以&#x…

7.Cloud-GateWay

0.概述 https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/ 1.入门配置 1.1 POM <!--新增gateway--> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-sta…

javaSE和javaEE区别

javaSE Java SE&#xff08;Java Platform&#xff0c;Standard Edition&#xff09; Java SE 以前称为 J2SE。 它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。 Java SE 包含了支持 Java Web服务开发的类&#xff0c;并为 Java Platform&#…

Spring 事务原理总结六

不知不觉&#xff0c;关于Spring事务的文章已经写了五篇了。老实讲我自己不断质疑过自己&#xff1a;现在写这些文章还有意义吗&#xff1f;当前的市场已经成什么样了&#xff0c;为什么还要固守这落后的技术&#xff1f;但是贝索斯一次接受访谈的回答&#xff0c;让我写下去的…

ESP32-Cam学习(1)——拍摄第一张照片

1.开发板介绍 使用的ESP32-Cam实物图为&#xff1a; 在某宝可以轻易买到。它分为主板&#xff0c;和底板。底板的主要功能是供电、程序下载等等。主板才是ESP32芯片的核心。 2.固件烧录 使用摄像头之前&#xff0c;需要给ESP32刷入支持摄像头的固件库&#xff0c;其下载地址为…

【C】printf和scanf函数的探索

printf()是输出函数&#xff0c;scanf()是输入函数&#xff0c;输入/输出函数简称为I/O函数。它两是C语言中最通用的输入输出函数。不同的编译器可能有不同的I/O的实现。 printf和scanf这两个函数虽然功能不同&#xff0c;但是工作原理几乎相同&#xff0c;它们都使用格式字符…