Spring的执行流程以及Bean的作用域和生命周期

news2024/11/30 20:28:34

在这里插入图片描述在这里插入图片描述


深入Bean对象

  • 1. Bean对象的作用域
    • 1.1 引出作用域问题
    • 1.2 六种作用域
  • 2. Spring的执行流程
  • 3. Bean对象的生命周期


     在之前的学习中,我们了解到Spring能够用来帮助我们管理Java中的Bean对象,我们能够向Spring的IOC容器中添加以及获取对象。那我们从Spring对象中获取到的相同Bean对象始终是同一个吗?Spring是怎样对我们的Bean对象进行管理的呢?Spring又是怎么执行的呢?接下来我们一块儿来探索一番!


1. Bean对象的作用域

1.1 引出作用域问题

     通常情况下,我们使用公共Bean对象都是希望这个公共的Bean对象是在被用户获取后在自己的工作区域中被修改,而不影响其他用户的工作区域。而Spring默认情况下Bean的作用域是被所有用户所共享的,这可能就会带来一些问题。我们通过下面这个栗子来引出有关Bean对象的作用域问题:
我们假设现在有一个公共的Bean对象,多个用户都可以来操作这个Bean对象,其中有一个用户对公共的Bean对象进行了修改,我们来看看其他用户获取到的公共的Bean对象会发生什么?


在这里插入图片描述


1.2 六种作用域

Spring容器在初始化一个Bean的同时会指定这个Bean的作用域。Bean对象的作用域共有以下六种:

  1. singleton——单例作用域
  2. prototype——原型作用域(即多例作用域)
  3. request——请求作用域
  4. session——会话作用域
  5. application——全局作用域
  6. websocket——HTTP websocket作用域

我们来详细了解一下这些个作用域具体说明:

  • singleton——单例作用域 该作用域下的Bean对象在IOC容器中只存在一份,任何的获取方式获取到的Bean对象都是同一份,并且不同工作对Bean的修改对其他工作可见。因此这种作用域适用于无状态的Bean使用,所谓无状态的Bean值得就是不需要修改的只读的对象。Spring默认选择的就是这种作用域。这种作用域就是我们在1.1
    引出作用域问题中举的例子

  • prototype——原型作用域 针对该作用域下的Bean请求,每次都会返回一个新的Bean对象。通过Spring上下文对象的getBean获取或者注解Autowired/Resource注入的Bean对象都是ioc容器中对应Bean的又一份新的实例!因此这种作用域适合于有状态的Bean对象使用。例如,我们需要实现1.1
    引出作用域问题
    例子的预期效果,可以针对User对象设置其作用域为prototype,这样userController对Bean对象的修改也只是针对自己的bean对象进行了修改,对UserEnhanceController也就不可见了,如下:
    在这里插入图片描述

  • request、session、application、websocket都是在SpringMVC中使用的,我们学到后边再进行详细的总结。下面先简单总结下:
  1. request作用域:每次的HTTP请求都会创建新的Bean实例,获取或者装配的Bean对象也都是新的。
  2. session作用域:使用这个作用域的Bean对象可以被同个用户共享,比如可以用来存放用户登录的信息。
  3. application全局作用域:这个作用域下的Bean对象被WEB应用的上下文信息共享。通常记录一个应用的共享信息。

到这里,我们会发现:singleton单例作用域和application作用域好像啊,但是他们是完全不相同的。那么应该怎么区分二者呢?
①首先,针对对象不同。singleton针对的是spring-core项目;application针对的是SpringWeb项目。
②其次,作用对象不同:singleton作用域IOC容器,而application作用与web servlet容器。


2. Spring的执行流程

    了解了Bean对象的作用域,我们得先弄明白Spring到底是怎么执行的,才能够清楚我们Bean对象生命周期的根源,我们一起来看下Spring的执行流程:
在这里插入图片描述


3. Bean对象的生命周期

    在学习Bean对象的生命周期之前,我们必须先清楚什么是生命周期?生命周期指的就是一个事物从新生到灭亡的整个过程。在这里指的就是Bean对象从被创建到被销毁的整个过程。Bean对象的生命周期可以分为以下5部分,我们挨个来看:在这里插入图片描述


在这个过程中,Bean的初始化是一个相对复杂的过程。

1. 实现了各种通知方法,像BeanNameAware、BeanFacctoryAware、ApplicationContext的接口方法。
2. 执行BeanPostProcessor初始化前置方法。
3. 执行@PostConstruct初始化方法,该方法在依赖注入操作之后执行。
4. 执行init-method方法
5. 执行BeanPostProcessor初始化后置方法。


我们也可以类比人的一生来理解Bean对象的一生…,Bean对象的一生,像极了人的一生:
在这里插入图片描述


Bean对象完整的生命周期图解如下:
在这里插入图片描述

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

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

相关文章

【腾讯云 Finops Crane 集训营】学习云原生成本优化

目录 开篇介绍搭建环境第一步第二步第三步 添加集群成本洞察成本分析资源推荐与副本数智能预测与自动扩缩容EHPA安装Metrics Server创建测试应用创建 EffectiveHPA增加负载整体流程 调度优化负载感知调度拓扑感知调度 混部清理环境 开篇 某次闲逛CSDN,发现了这样一…

(文章复现)基于电力系统碳排放流理论的碳排放分摊模型研究(含matlab代码)

参考文献:基于电力系统碳排放流理论的碳排放分摊模型研究 之前写过一篇博客复现论文《电力系统碳排放流的计算方法初探》,那篇文章模型比较简单,没有考虑网损。(文章复现)电力系统碳排放流的计算方法初探(含matlab代码) 今天要复现的这篇文献…

1行命令本地部署 AgentGPT

本地部署 AgentGPT 部署 AgentGPT访问 AgentGPT 部署 AgentGPT 运行下面命令部署 AgentGPT,输入你的 OpenAI Key, git clone https://github.com/reworkd/AgentGPT.git; cd AgentGPT; ./setup.sh --docker访问 AgentGPT 使用浏览器打开 http://localh…

万得后端一面

目录 1.说说重载和重写2.内连接和外连接3.如果有一个任务来了,线程池怎么运行5.hashset怎么判断重复6.list和set说说7.说说有哪些list8.单例模式的饿汉式和懒汉式,怎么样可以防止反射。9.volatile关键字说说 1.说说重载和重写 1、重载发生在本类&#x…

MySQL创建索引时提示“Specified key was too long; max key length is 767 bytes”

MySQL创建索引时提示“Specified key was too long; max key length is 767 bytes” 问题描述 数据库RDS MySQL版在创建表索引时,出现如下错误信息。 Error 1071: Specified key was too long; max key length is 767 bytes.ERROR 1709 (HY000): Index column siz…

基于ESP32/ESP8266的单通道LoRaWAN网关设计-网页界面介绍

资料下载链接》》 网页界面介绍 对于单通道网关的第六版用户界面,我们专注于 Web 界面。本文档仅涉及 Web 界面。有几个部分要讨论: 用户界面说明web界面可以设置哪些参数单通道接口配置涉及的文件。 Web 界面的各个部分 启动 Web 界面时&#xff0…

【评测】腾讯云服务器的性能怎么样?

转载请注明出处:小锋学长生活大爆炸[ http://xfxuezhang.cn] 最近腾讯云推出了5年款服务器,性价比非常的高。但这么便宜的服务器,性能怎么样呢?学长特地领取了新人试用版测试了一下性能,这里与大家分享一下。 服务器领…

与对应负数同时存在的最大正整数

一、2441. 与对应负数同时存在的最大正整数 思路 这个题我想的是将数组中的负数全部找出来放进另一数组,然后再将原数组的元素与与之相比,如果相加等于0,那么就使num; 代码实现 int findMaxK(int* nums, int numsSize){int max0…

学系统集成项目管理工程师(中项)系列21b_整体管理(下)

1. 监控项目工作 1.1. 跟踪、审查和报告项目进展,以实现项目管理计划中确定的绩效目标的过程 1.2. 输入 1.2.1. 项目管理计划 1.2.2. 进度预测 1.2.2.1. 基于实际进展与进度基准的比较而计算出进度预测 1.2.2.1.1. 完工尚需时间估算(ETC) 1.2.2.1.2. 进度偏差(SV…

威胁报告检测到物理后果呈指数增长的OT网络攻击

2023年威胁报告 - 具有物理后果的 OT 网络攻击 在过去一年(2022 年),我们看到了 57 起针对工业系统的 OT 相关网络攻击,这些攻击在现实世界中造成了物理后果。这是我们在 2021 年看到的 22 次类似攻击的 2.5 倍多,是 …

网路通信-路由交换协议

目录 一、什么是协议 二、为什么要有协议 三、协议分类 (1)OSI通信模型 (2)tcp/ip通信模型 (3)数据传输的过程 1.传输路线 2.发送者封装数据 3.数据经过交换机 4.数据经过路由器 5.路由器转发到目…

深度学习环境配置系列文章(四):WSL2配置Windows11和Linux双系统

深度学习环境配置系列文章目录 第一章 专业名称和配置方案介绍 第二章 Anaconda配置Python和PyTorch 第三章 配置VS Code和Jupyter的Python环境 第四章 WSL2配置Windows11和Linux双系统 第五章 配置Docker深度学习开发环境 第四章文章目录 深度学习环境配置系列文章目录前言一…

横截面收益率(二) 阿尔法策略是如何构建的

资本资产定价模型自从首次被提出以来在金融经济学中一直处于中心地位。 在一系列简化假定条件下,资本资产定价模型表明,任何证券的收益率与该证券 的系统性风险(或者贝塔值)呈线性关系。因此,依据资本资产定价模型横截…

【STM32】基础知识 第十三课 中断

【STM32】基础知识 第十三课 中断 概述中断是什么中断的作用 & 意义STM32 中断体系NVIC中断向量表STM32 中断优先级基本概念 STM32 外部中断器 (EXTI)EXTI 简介EXTI 配置 AFIOAFIO 与中断 案例 概述 今天小白我将带领大家详细介绍 STM32 单片机中的中断处理机制, 包括中断…

Python每日一练(20230514) 不同路径 I\II\III UniquePaths

目录 1. 不同路径 I Unique Paths 1 2. 不同路径 II Unique Paths 2 3. 不同路径 III Unique Paths 3 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 不同路径 I Unique Paths 1 一个…

Java每日一练(20230514) 滑动窗、最大子序和、转罗马数字

目录 1. 滑动窗口最大值 🌟🌟 2. 最大子序和 🌟 3. 整数转罗马数字 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1.…

C/C++每日一练(20230514) 全排列、分数转小数、排序链表去重II

目录 1. 全排列 🌟🌟 2. 分数到小数 🌟🌟 3. 删除排序链表中的重复元素 II 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Ja…

【C++】unordered_map与unordered_set(系列关联式容器)

文章目录 1.unordered系列关联式容器2. unordered_map3.unordered_set 1.unordered系列关联式容器 在C98中,STL提供了底层为红黑树结构的一系列关联式容器,如map和set,它们在查询时效率可达logN,即最差情况下需要比较红黑树的高度…

【UnavailableInvalidChannel: The channel is not accessible or is invalid.】

Collecting package metadata (current_repodata.json): failedUnavailableInvalidChannel: The channel is not accessible or is invalid.channel name: simplechannel url: http://pypi.douban.com/simpleerror code: 404.condarc以点开头,一般表示 conda 应用程…

前端016_文章管理模块_列表功能

文章管理模块_列表功能 1、需求分析2、Mock模拟接口数据3、Api调用接口4、列表模版6、分页查询7、条件查询1、需求分析 文章管理模块主要进行对文章的增删改查,一篇文章可以选择多个标签。 首先开发模块中的列表功能,包含数据列表、分页、查询。 2、Mock模拟接口数据 请求…