当前位置: 首页 > news >正文

Spring为什么这么火 之 Bean的6种作用域和Bean的生命周期

1、Bean的作用域

1.1、什么是作用域?

        限定程序中变量的可用范围叫做作用域,或者说在源代码中定义变量的某个区域就叫做作用域

1.2、Bean的6种作用域

  • singleton:单例作用域
  • prototype:原型作用域【多例作用域】
  • request:请求作用域
  • session:回话作用域
  • application:全局作用域
  • websocket:HHTP WebSocket作用域

后4种状态是Spring MVC中的值,在普通的Spring项目中只有前两种


singleton——单例作用域

  • 含义:该作用域下的Bean在IoC容器中只存在一个实例:获取Bean及装配Bean都是同一个对象
  • 场景:通常无状态的Bean使用该作用域【无状态:表示Bean对象的属性状态不需要更新】
  • 备注:Spring默认选择该作用域

prototype——原型作用域【多例作用域】

  • 含义:每次对该作用域下的Bean的请求都会创建新的实例:获取Bean及装配Bean都是新的对象实例
  • 场景:通常有状态的Bean使用该作用域

request——请求作用域

  • 含义:每次http请求会创建新的Bean实例,类似于prototype
  • 场景:一次http的请求和响应的共享Bean
  • 备注:限定SpringMVC中使用

session——回话作用域

  • 含义:在一个http session中,定义一个Bean实例
  • 场景:用户回话的共享Bean,比如:记录一个用户的登录信息
  • 备注:限定SpringMVC中使用

application:全局作用域

  • 含义:在一个http servlet Context中,定义一个Bean实例
  • 场景:Web应用的上下文信息,比如:记录一个应用的共享信息
  • 备注:限定SpringMVC中使用

websocket——HHTP WebSocket作用域

  • 定义:在一个HTTP WebSocket的生命周期中,定义一个Bean实例
  • 场景:WebSocket的每次会话中,保存一个Map结构的头信息,将用来包裹客户端消息头【第一次初始化后,直到WebSocket结束都是同一个Bean
  • 备注:限定Spring WebSocket中使用

单例作用域(singleton)VS 全局作用域(application)

  • singleton是Spring Core的作用域;application是Spring Web中的作用域
  • singleton作用于IoC的容器;application作用于Servlet容器

1.3、如何设置作用域

  • @Scope("prototype")直接设置值
  • @Scope(ConfigurableBeanFactory.SCOPE_PRTOTYPE)全局变量的方式设置


2、Spring执行流程和Bean的生命周期

2.1、Spring启动和加载流程

 

 Bean 执⾏流程(Spring 执⾏流程):启动 Spring 容器 -> 实例化 Bean(分配内存空间,从⽆到有) -> Bean 注册到 Spring 中(存操作) -> 将 Bean 装配到需要的类中(取操作)。

  • 启动容器【启动项目】
  • 读取配置文件,初始化【使用xml直接注册bean;配置bean根(扫描)路径】
  • 将Bean存储到Spring中,通过类注解进行扫描和装配
  • 将bean从Spring读取出来,装配到相应的类 

2.2、Bean生命周期

Bean 的⽣命周期分为以下 5 ⼤部分:

1.实例化 Bean(为 Bean 分配内存空间)

2.设置属性(Bean 注⼊和装配)

3.Bean 初始化

1、执行各种通知(各种Aware)
比如:
        Spring在初始化 bean,是需要给 bean 赋予 id(name)。
        而设置 beanName 成功的话,就会生成一个 beadNameAware 通知。

2、执行初始化的前置方法
        前提:我们重新 前置方法,不然它按照源码来操作。

3、执行构造方法,两种执行方式。
  3.1、执行具有 @PostConstruct 注解的方法。【PostConstruct -> 初始化方法】
  3.2、执行 init-method 方法,是 Spring 中 配置文件里面 的 bean 标签所有具有的属性。

        这个 两个执行方法,是两个不同时期的产物。@PostConstruct,是一种通过 注解 来初始化的方法。init-method,是 xml 时代 的 初始化方法。但是!它们描述的都是同一件事情 “ 初始化 ”。

它们两个执行的优先级
        这么说吧:如果 两种方法,同时存在。
        先执行 @PostConstruct 注解的方法,然后执行 init-method 方法。
        原因更简单,我们是使用的是高版本的版本,过去的东西终究会被淘汰!

4、执行初始化的后置方法

4.使⽤ Bean
5.销毁 Bean

        销毁容器的各种方法,如 @PreDestroy,DisposableBean 接⼝⽅法,destroy-method
【 PS1:@PreDestroy 和 destroy-method 之间的关系,与 @PostConstruct 和 init-method 之间的关系,是一样的。】
【PS2:如果重写了 DisposableBean 接口方法,就会执行销毁 Bean】
【PS3:优先级:@PreDestroy > DisposableBean > destroy-method】

执⾏流程如下图所示:

好啦,本期结束啦,下期见~

相关文章:

Spring为什么这么火 之 Bean的6种作用域和Bean的生命周期

1、Bean的作用域 1.1、什么是作用域? 限定程序中变量的可用范围叫做作用域,或者说在源代码中定义变量的某个区域就叫做作用域 1.2、Bean的6种作用域 singleton:单例作用域prototype:原型作用域【多例作用域】request&#xff1…...

【CSS面试题】2023前端最新版css模块,高频15问

🥳博 主:初映CY的前说(前端领域) 🌞个人信条:想要变成得到,中间还有做到! 🤘本文核心:博主收集的CSS面试题 目录 一、CSS必备面试题 1.CSS3新特性 2.CSS实现元素两个盒子垂…...

SpringCloud-Netflix学习笔记10——Hystrix实现服务熔断

一、概述 1、分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免的失败! 2、服务雪崩 多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B 和微服务C又…...

精华文稿|迈向统一的点云三维物体检测框架

分享嘉宾 | 杨泽同 文稿整理 | William 嘉宾介绍 Introduction 3D检测是在三维世界中去定位和分类不同的物体,与传统2D检测的区别在于它有一个深度信息。目前,大部分的工作是倾向于用点云去做三维检测,点云实际上是通过传感器去扫描出来的一…...

面试题:Redis网络模型

1 用户空间和内核空间以Centos 7 linux操作系统为例。计算机系统被内核操控, 内核被应用操控。为了避免用户应用导致冲突甚至内核崩溃,用户应用与内核是分离的进程的寻址空间会划分为两部分:内核空间、用户空间。用户空间只能执行受限的命令(Rin3&#x…...

微信小程序开发你可能不知道的开发技巧

1. 页面级data,组件data的查看 页面级data的查看,很多开发者应该都知道;组件级的数据查看我是开发了大半年才发现的; 页面级的data查看: 组件的data查看: 2. 放大模拟器【调整一些UI细节】 效果&#x…...

STM32开发(8)----CubeMX配置串口通讯(中断方式和DMA方式)

CubeMX配置串口通讯(中断方式和DMA方式)前言一、中断方式1.CubeMX配置2.代码实现3.实验结果二、DMA方式1.CubeMX配置2.代码实现3.实验结果总结前言 本章继续介绍使用STM32CubeMX对串口进行配置的方法,串口通讯有三种方式:轮询&am…...

7.1 微服务-SpringCloud(二)

目录 前言 7.1.5 Hystrix 7.1.5.1 什么是Hystrix 7.1.5.2 雪崩问题 7.1.5.3 线程隔离,服务降级 7.1.5.4 搭建 7.1.5.4.1 引入依赖 7.1.5.4.2 开启熔断 7.1.5.4.3 编写降级逻辑 1.局部降级逻辑 2.全局降级逻辑 7.1.5.4.4 设置超时 7.1.5.5 服务熔断 7.…...

Spring的AOP开发-基于xml配置的AOP

Spring的AOP开发-基于xml配置的AOP xml方式AOP快速入门 通过配置文件的方式解决以下问题 配置哪些包、哪些类、哪些方法需要被增强配置目标方法要被哪些通知方法所增强,在目标方法执行之前还是之后执行增强 配置方式的设计、配置文件(注解),Spring已…...

JAVA的垃圾收集器与内存分配策略【一篇文章直接看懂】

内存动态分配和垃圾收集技术是JAVA和C之间最大的区别之一 垃圾收集(Garbage Collection,GC)只办三件事: 哪些内存需要回收什么时候回收如何回收 对于对象回收的方法 引用计数法: 每处引用时1,引用失效…...

NLP学习——信息抽取

信息抽取 自动从半结构或无结构的文本中抽取出结构化信息的任务。常见的信息抽取任务有三类:实体抽取、关系抽取、事件抽取。 1、实体抽取 从一段文本中抽取出文本内容并识别为预定义的类别。 实体抽取任务中的复杂问题: 重复嵌套,原文中…...

【深度学习基础7】预训练、激活函数、权重初始化、块归一化

一、Unsupervised Pre-training 得益于 Hinton and Salakhutdinov 在 2006 年的开创性工作— 无监督预训(unsupervised pre-training);在《Reducing the dimensionality of data with neural networks.》这篇论文中,他们在 RBMs 中引入无监督预训练,下面我们将在Autoenco…...

MetaMQ

文章目录MetaMQMetaMQ 的优势在于:MetaMQ 的劣势也有:MetaMQ MetaMQ 是一个基于以太坊的可扩展分布式消息队列(MQ)系统,它可以支持大规模的分布式应用程序。MetaMQ 是一个开放源代码项目,它支持企业级应用程…...

热门盘点 | 10款评分最高的项目管理工具

项目管理软件可以让项目经理及时掌握项目进展可把复杂的任务分解简单帮助项目经理及时了解整个团队进展随着现代项目需求日趋复杂和个性选一个好的项目管理软件还是很有必要的① PingCode国内研发项目管理软件PingCode,它是国内软件研发项目榜单中评分最高的项目管理…...

若依框架---分页功能

继前几天我们学习若依管理系统中的代码生成工具,我们发现若依系统中还要很多值得学习的地方。今天我们来学习若依管理系统中的分页工具。 若依管理系统是前后端分离的(准确的说,若依有前后端分离版本)。 前端 若依前端的分页没…...

CHAPTER 3 Jenkins SVN GItlab

Jenkins SVN GItlab3.1 JenkinsSVN3.1.1 搭建SVN服务器1. 安装svn server2. 查看svn安装位置3. 创建版本库目录4. 创建svn版本库5. 配置修改6. 防火墙开启3690端口7. 启动SVN-server8. 客户端访问svn服务器3.1.2 测试脚本提交3.1.3 jenkins下载代码配置1. 安装Subversion插件2.…...

为什么Redis集群的最大槽数是16384个?

对于客户端请求的key,根据公式HASH_SLOTCRC16(key) mod 16384,计算出映射到哪个分片上,然后Redis会去相应的节点进行操作! 为什么有16384个槽? Redis集群并没有使用一致性hash而是引入了哈希槽的概念。Redis 集群有16…...

餐饮企业数据可视化大屏(智慧餐饮)

随着信息技术的深入发展,数据大屏的适用场景日益广泛,集工作汇报、实时监控和预测分析等功能于一身。 数据可视化的本质是视觉对话,数据可视化将数据分析技术与图形技术结合,清晰有效地将分析结果信息进行解读和传达。 当前很多餐…...

Kafka安装及zookeeper is not a recognized option问题解决

一安装JAVA JDK(略) 二安装ZooKeeper 下载安装包,建议bin版本 http://zookeeper.apache.org/releases.html#download解压并进入ZooKeeper,将“zoo_sample.cfg”重命名为“zoo.cfg” D:\Kafka\apache-zookeeper-3.7.1-bin\conf…...

leetcode刷题 | 关于二叉树的题型总结1

leetcode刷题 | 关于二叉树的题型总结1 文章目录leetcode刷题 | 关于二叉树的题型总结1题目连接完全二叉树插入器在每个树行中找最大值找树左下角的值二叉树的右视图二叉树剪枝题目连接 919. 完全二叉树插入器 - 力扣(LeetCode) 515. 在每个树行中找最…...

【复盘】2026年5月11日(周一)

生成时间:2026-05-11 | 数据来源:金融数据库 研报库 核心关注:科创50暴涨4.65%,半导体领涨,量能放大至3.54万亿一、今日核心结论总结一句话: 科创50引领、半导体强势爆发,A股全面走强创阶段新高…...

硬件工程师的办公室布局与效率系统:从工具管理到创意激发

1. 我的“极乐之穹”:一个硬件工程师的办公室漫游每次在博客里提到“极乐之穹”,指的都是我的办公室。偶尔,我也会聊起在四处搜罗时遇到并收入囊中的那些令人心动的电子设备或“艺术品”。时间久了,总有人让我拍点照片分享。问题在…...

为什么92%的团队用错Gemini做Slides?——基于17家SaaS公司实测数据的生成效率断层分析

更多请点击: https://intelliparadigm.com 第一章:Gemini生成Slides的底层机制与能力边界 Gemini 生成幻灯片(Slides)并非简单地将文本转为 PPT 页面,而是依托多模态大模型对语义结构、视觉层级与演示逻辑的联合建模。…...

从键值对到时序数据:FlashDB在智能家居传感器上的两种实战用法

从键值对到时序数据:FlashDB在智能家居传感器上的两种实战用法 清晨6点,卧室的温湿度传感器悄然启动。它需要在电池耗尽前完成三项任务:读取当前环境数据、检查预设报警阈值、通过LoRaWAN网络上传信息。当网络不稳定时,这些数据必…...

基于OpenClaw协议的轻量级AI代理网关MiniClaw实战指南

1. 项目概述:一个轻量级的AI代理网关如果你正在开发一个基于OpenClaw协议的AI应用客户端,或者想快速搭建一个能与现有OpenClaw生态工具(比如各种仪表盘、集成插件)兼容的独立AI代理服务,那么你很可能需要一个能完整实现…...

别再只会用Matplotlib画基础热力图了!这5个高级定制技巧让你的图表更专业

别再只会用Matplotlib画基础热力图了!这5个高级定制技巧让你的图表更专业 热力图是数据可视化中最直观的展示方式之一,但大多数数据分析师止步于基础用法。当你的图表需要出现在学术论文、商业报告或投资人演示中时,默认参数生成的热力图往往…...

5分钟快速部署WebRTC Camera到Home Assistant:终极低延迟监控方案

5分钟快速部署WebRTC Camera到Home Assistant:终极低延迟监控方案 【免费下载链接】WebRTC Home Assistant custom component for real-time viewing of almost any camera stream using WebRTC and other technologies. 项目地址: https://gitcode.com/gh_mirror…...

Discord集成Claude智能体:极简Docker容器化部署与安全实践

1. 项目概述:一个为Discord量身定制的Claude智能体运行栈 如果你和我一样,既想在日常工作的Discord频道里无缝调用Claude这样的强大AI助手,又对复杂、臃肿的Bot框架感到头疼,那么 nanoclaw-discord 这个项目可能就是你在找的答…...

上网行为怎么监控?教你五个简单实用的上网行为监控方法,建议收藏

在数字化办公时代,企业管理面临着新的挑战:一方面需要网络提供资讯和工具,另一方面,无节制的非工作上网行为正在侵蚀企业的生产力。如何科学、合理地监控上网行为?以下为您介绍五个监控方法,涵盖了从硬件到…...

3分钟掌握B站缓存视频转换:m4s-converter终极使用指南

3分钟掌握B站缓存视频转换:m4s-converter终极使用指南 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经遇到过这样的困扰&a…...