【Spring】Spring Bean 容器的生命周期是什么样的?

news2025/1/13 6:29:40

文章目录

  • 一、什么是 Spring Bean 的生命周期?
  • 二、Spring 中的 bean 的作用域有哪些?
  • 三、Spring Bean 的生命周期
  • 四、Spring Bean 的生命周期流程图

一、什么是 Spring Bean 的生命周期?

对于普通的 Java 对象,当 new 的时候创建对象,然后该对象就能够使用了。一旦该对象不再被使用,则由 Java 自动进行垃圾回收。

而 Spring 中的对象是 bean,bean 和普通的 Java 对象没啥大的区别,只不过 Spring 不再自己去 new 对象了,而是由 IoC 容器去帮助我们实例化对象并且管理它,我们需要哪个对象,去问 IoC 容器要即可。IoC 其实就是解决对象之间的耦合问题,Spring Bean 的生命周期完全由容器控制。

二、Spring 中的 bean 的作用域有哪些?

  • singleton : 唯一 bean 实例,Spring 中的 bean 默认都是单例的。
  • prototype : 每次请求都会创建一个新的 bean 实例。
  • request : 每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP request 内有效。
  • session : 每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP session 内有效。
  • global-session: 全局 session 作用域,仅仅在基于 Portlet 的 web 应用中才有意义,Spring5 已经没有了。Portlet 是能够生成语义代码(例如:HTML)片段的小型 Java Web 插件。它们基于 portlet 容器,可以像 servlet 一样处理 HTTP 请求。但是,与 servlet 不同,每个 portlet 都有不同的会话。

三、Spring Bean 的生命周期

  • 我们知道对于普通的 Java 对象来说,它们的生命周期就是:

    • 实例化

    • 该对象不再被使用时通过垃圾回收机制进行回收

  • 而对于 Spring Bean 的生命周期来说:

    • 实例化 Instantiation

    • 属性赋值 Populate

    • 初始化 Initialization

    • 销毁 Destruction

      实例化 -> 属性赋值 -> 初始化 -> 销毁

四、Spring Bean 的生命周期流程图

在这里插入图片描述

  • Bean 容器找到配置文件中 Spring Bean 的定义。
  • Bean 容器利用 Java Reflection API 创建一个 Bean 的实例。
  • 如果涉及到一些属性值 利用 set()方法设置一些属性值。
  • 如果 Bean 实现了 BeanNameAware 接口,调用 setBeanName()方法,传入 Bean 的
    名字。
  • 如果 Bean 实现了 BeanClassLoaderAware 接口,调用 setBeanClassLoader()方法,
    传入 ClassLoader 对象的实例。
  • 如果 Bean 实现了 BeanFactoryAware 接口,调用 setBeanFactory()方法,传入
    BeanFactory 对象的实例。
  • 与上面的类似,如果实现了其他 *.Aware 接口,就调用相应的方法。
  • 如果有和加载这个 Bean 的 Spring 容器相关的 BeanPostProcessor 对象,执行
    postProcessBeforeInitialization() 方法
  • 如果 Bean 实现了 InitializingBean 接口,执行 afterPropertiesSet()方法。
  • 如果 Bean 在配置文件中的定义包含 init-method 属性,执行指定的方法。
  • 如果有和加载这个 Bean 的 Spring 容器相关的 BeanPostProcessor 对象,执行
    postProcessAfterInitialization() 方法
  • 当要销毁 Bean 的时候,如果 Bean 实现了 DisposableBean 接口,执行 destroy() 方
    法。
  • 当要销毁 Bean 的时候,如果 Bean 在配置文件中的定义包含 destroy-method 属性,
    执行指定的方法

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

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

相关文章

智头条|2023TUYA开发者大会精彩不断,IDC预测:2026年全球AI服务支出将增至646亿美元

1、行业动态 奢侈品巨头LVMH宣布将推出元宇宙项目“The Journey” 近日,奢侈品巨头LVMH宣布推出元宇宙项目“The Journey”,允许旗下用户进入一个拥有专属产品和体验的全新虚拟世界,目前官网显示该元宇宙项目下包括The Showroom、The Tech …

HotSpot 垃圾收集器

HotSpot 垃圾收集器 HotSpot 虚拟机提供了多种垃圾收集器,每种收集器都有各自的特点,虽然我们要对各个收集器进行比较,但并非为了挑选出一个最好的收集器。我们选择的只是对具体应用最合适的收集器。 新生代垃圾收集器 Serial 垃圾收集器&am…

Tomcat的部署及优化

目录 1.Tomcat概述 1.1 Tomcat的组件构成​编辑 1.2 Tomcat功能组件结构 1.3 Tomcat的请求过程 2. Tomcat服务的部署 2.1 搭建Tomcat运行环境 3.设置JDK环境变量​ 3.1测试java环境 4.安装启动Tomcat 1.Tomcat概述 Tomcat 是 基于Java 语言开发的Tomcat 属于轻量级应用服务…

数据结构 | 顺序线性表

一、数据结构定义 typedef int SqlTableType;typedef struct seqTable{int MAXNUM; // 最大元素个数 int curNum; // 元素的个数SqlTableType* element; // 连续空间的起始地址 }*SqlTable; 二、方法概览 SqlTable CreateSqlTable(int max); // 创建空顺序表 …

MySQL——mha高可用

MHA的概念 什么是 MHA MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换的过…

【Android -- 面试】程序员面试必备软技能,值得收藏!

文章目录 一、准备技术型简历1. 准备简历模板2. 准备个⼈信息3. 准备专业技能4. 准备⼯作经历5. 准备项⽬经历 二、面试前的准备1. 利用脑图来梳理知识点2. 收到面试邀请后的准备 三、面试的注意事项1. ⾃我介绍2. 技术考察3. 向⾯试官提问4. 面试礼仪 四、如何通过 HR ⾯1. HR…

数据结构 | 顺序栈

一、数据结构定义 typedef int StackType; typedef struct seqStack{int MAXNUM; // 最大元素个数 int top; // 栈顶位置,初始化为0或-1StackType element[100]; // 元素的连续空间的起始地址 } *SeqStack; 二、方法概览 SeqStack CreateSqlStack…

【服务器数据恢复】ZFS文件系统下raid5数据恢复案例

服务器数据恢复环境: 某公司一台EMC某型号存储中有一组由12块硬盘组建的raid5磁盘阵列,其中有2块盘作为热备盘使用。 服务器故障&分析: raid5磁盘阵列中有2块磁盘离线,只有1块热备盘成功启用,另外一块热备盘未启用…

Elastic 栈中的 Kibana安装

Kibana 是一个开源分析和可视化平台,旨在与 Elasticsearch 协同工作。 你使用 Kibana 搜索,查看和与存储在 Elasticsearch 索引中的数据进行交互。 你可以轻松执行高级数据分析,并在各种图表,表格和地图中可视化你的数据。 官方链…

文件批量下载方法 文件批量下载工具

软件版本:Internet Download Manager 在当今数字化时代,我们日常使用电脑进行各种工作和娱乐活动。有时候,我们需要从互联网上下载大量文件,例如电影、音乐、文档等。在这种情况下,手动逐个下载文件将变得繁琐而耗时。…

梯度下降法求函数的解

题目 例如 y x^ 5 e^x3x−3,求解y 0的解 问题分析 首先要构造y 0的损失函数,让这个损失函数是凸的,也就是可以有最优解,并且是可到的,比较容易想到的是mse平方误差,我们要让y和0之间绝对误差最小。lo…

变压器铜铝材质分析仪技术参数

一、主要技术指标 1.输入特性 有源部分: 电压测量范围:0~10V 电流测量范围:0~10A 无源部分: 电压测量范围:0~750V 宽量限(可以外接电压互感器)。 电流测量范围:0~100A内部自动…

【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(6月 28 日论文合集)

文章目录 一、检测相关(6篇)1.1 Detector-Free Structure from Motion1.2 Irregular Change Detection in Sparse Bi-Temporal Point Clouds using Learned Place Recognition Descriptors and Point-to-Voxel Comparison1.3 Transferability Metrics for Object Detection1.4 …

【超全面】Linux嵌入式干货学习系列教程

文章目录 一、前言二、Linux基础篇三、数据结构与算法基础三、Linux应用篇四、Linux网络篇五、ARM篇六、Linux系统移植篇七、Linux驱动篇八、Linux特别篇九、Linux项目篇 一、前言 博主学习Linux也有几个月了,在这里为广大朋友整理出嵌入式linux的学习知识&#xff…

精彩回顾 | 迪捷软件亮相2023飞机航空电子国际论坛

2023年6月29日,2023(第十二届)飞机航空电子国际论坛(以下简称论坛)在上海市圆满落幕。论坛由中国航空学会、中国航空研究院、中航机载系统有限公司共同主办,中国航空无线电电子研究所、航空电子系统综合技术…

SpringCloud-Gateway网关全悉

1)概述 使用说明文档 其他版本api文档请自由查阅: https://spring.io/projects/spring-cloud-gateway#learn 1.1)是什么 Cloud全家桶中有个很重要的组件就是api网关,在1.x版本中都是采用的Zuul网关,但在2.x版本中&a…

【Logback技术专题】「入门到精通系列教程」深入探索Logback日志框架的原理分析和开发实战技术指南(下篇)

深入探索Logback日志框架的原理分析和开发实战技术指南&#xff08;下篇&#xff09; 根节点configuration包含的属性基本参数详解子节点介绍设置上下文名称<contextName>使用案例 设置变量属性值<property>获取时间戳字符串<timestamp>设置loggerroot根节点…

CDH 之 Hive 中文乱码平定通用法则

一、乱象 1.1 中文注释乱码 hive> DESCRIBE test; OK # col_name data_type comment id string ??ID ?? pcs string ????? …

java实现远程执行Linux下的shell脚本

java实现远程执行Linux下的shell脚本 背景导入Jar包第一步&#xff1a;远程连接第二步&#xff1a;开启Session第三步&#xff1a;新建测试脚本文件结果报错 背景 最近有个项目&#xff0c;需要在Linux下的服务器内写了一部分Python脚本&#xff0c;业务处理却是在Java内&…

采用三五555时基电路的简易/自动温度控制器电路设计

采用 555 时基电路的简易温度控制器 本电路是采用555时基集成电路和很少的外围元件组成的一个温度自动控制器。因为电路中各点电压都来自同一-直流电源&#xff0c;所以不需要性能很好的稳压电源&#xff0c;用电容降压法便能可靠地工作。电路元件价格低、体积小、便于在业余条…