Spring中Bean的“一生”(生命周期)

news2024/10/7 18:24:49

文章目录

  • 一、图解
  • 二、文字解析
  • 总结


一、图解

在这里插入图片描述>注:处于同一行的执行顺序是从左往右

二、文字解析

SpringBean的生命周期总体分为四个阶段:实例化=>属性注入=>初始化=>销毁

  • Step1 ==实例化Bean:==根据配置文件中Bean的定义,利用JavaReflection反射技术创建Bean的实例(还是一个半成品
  • Step2 注入对象依赖的属性值(对象)
  • Step3 处理各种Aware接口: Spring会检测该Bean是否实现了xxxAware接口,通过此类型的接口,可以让Spring框架为当前Bean注入相应的内容。
    • 如果实现BeanNameAware接口,会调用它实现的setBeanName(String beanId)方法,注入Bean的名字
    • 如果实现BeanFactoryAware接口,会调用它实现的setBeanFactory()方法,注入的是Spring工厂
    • 如果实现的是ApplicationContextAware接口,会调用setApplicationContext()方法,注入Spring上下文
  • Step4 执行BeanPostProcessor前置处理: 如果想对Bean进行一些自定义的前置处理,那么可以让Bean实现BeanPostProcessor接口,将会在该阶段调用postProcessBeforeInitialization(Object obj,String s)方法
  • Step5 执行InitializingBean初始化方法: 如果Bean实现了InitializingBean接口,执行afterPropertiesSet()方法
  • Step6 执行init-method自定义初始化方法: 如果BeanSpring配置文件中配置了init-method属性,则会自动调用其配置的初始化方法
  • Step7 执行BeanPostProcessor后置处理: 如果这个Bean实现BeanPostProcessor接口,将会在该阶段调用**postProcessAfterInitialization(Object obj,String s)**方法
  • 以上步骤完成之后,Bean已经被真正创建,可以正常使用了
  • Step8 执行DisposableBean销毁Bean:Bean不再需要时,会经过清理阶段,如果实现了DisposableBean接口,则会调用destroy()方法执行销毁
  • Step9 执行destroy-method自定义销毁方法: 如果BeanSpring配置文件中配置了destroy-method属性,则会自动调用其配置的销毁方法

总结

  • 首先是实例化属性赋值初始化销毁这 4 个大阶段;
  • 再是初始化的具体操作,有 Aware 接口的依赖注入BeanPostProcessor 在初始化前后的前后置处理以及 InitializingBean 和 配置类加载的init-method 的初始化操作;
  • 实现 DisposableBean 接口调用destory()方法销毁以及配置类加载的destory-method销毁方法

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

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

相关文章

设计模式(3)装饰模式

一、介绍: 1、应用场景:把所需的功能按正确的顺序串联起来进行控制。动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。 当需要给一个现有类添加附加职责,而又不能采用生成子类的方法…

[RCTF2019]DontEatMe

前言 一道迷宫题,但是输入被加密后使用,迷宫也需要在程序中找出并没有直接输出 分析 反调试 发现有两个比较特殊的地方,随机数和创建了新线程,随机数后面又被重新赋值给覆盖了,暂时不用管,ZwSetInformat…

业务需求紧急,IT部门缺失,企业如何应对"影子IT"危机?

在当今数字化时代,业务部门的需求通常非常紧急,但IT部门的排期却跟不上,导致业务部门焦头烂额。IT部门面临着诸多需求,无法在规定时间范围内满足每一个需求,因此未授权的应用程序安全监管也变得愈发困难。 影子IT的频发…

互联网电影购票选座后台管理系统源码开发

搭建一个互联网电影购票选座后台管理系统需要进行以下步骤: 1. 需求分析:首先要明确系统的功能和需求,包括电影列表管理、场次管理、座位管理、订单管理等。 2. 技术选型:选择适合的技术栈进行开发,包括后端开发语言…

铸铝齿轮泵比例流量阀放大器

液压齿轮泵是一种常用的液压泵,被广泛应用于各种低压系统中,如采矿、冶金、建筑、航空、航海、农林等机械的中、高压液压系统中。 液压齿轮泵的特点是结构简单,制造方便,价格低廉,体积小,重量轻&#xff0…

探析STM32标准库与HAL库之间的差异与优劣

引言: 在嵌入式开发领域,STMicroelectronics的STM32系列芯片广受欢迎。STM32提供了两种主要的软件库,即标准库和HAL库,用于开发各种应用。本文将探讨这两种库之间的差异,比较它们的优劣,并分析在选择库时需…

[HDLBits] Exams/m2014 q4e

Implement the following circuit: module top_module (input in1,input in2,output out);assign out!(in1||in2); endmodule

【MySQL】

这里写目录标题 MySQL架构一条sql执行流程MySQL数据存放电脑位置ibd文件结构行溢出是什么MySQL行记录存储格式索引为什么InnoDB选择B树作为索引数据结构什么时候需要创建索引优化索引方法InnoDB内部怎么存储数据B 树如何进行查询聚簇索引和二级索引为什么MySQL要采用B树作为索引…

【linux】ssh 和adb connect区别

问:ssh 与ping的区别 答:SSH(Secure Shell)和Ping是两种完全不同的网络工具。 SSH是一种加密的网络协议,用于安全地远程管理或访问远程计算机。它提供了一种安全的通信方式,可以在不安全的网络上进行远程登…

无涯教程-Perl - fileno函数

描述 此函数返回指定的FILEHANDLE的文件描述符号(由C和POSIX函数使用)。通常,这仅在使用select函数和任何低级tty函数时才有用。 语法 以下是此函数的简单语法- fileno FILEHANDLE返回值 此函数返回FILEHANDLE的文件描述符(数字),失败时不确定。 Perl 中的 fileno函数 - 无…

c#设计模式-行为型模式 之 观察者模式

定义: 又被称为发布-订阅(Publish/Subscribe)模式,它定义了一种一对多的依赖关系,让多个观察者 对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自 …

Go Gin 中使用 JWT

一、JWT JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现方式,目前多用于前后端分离项目和OAuth2.0业务场景下。 二、为什么要用在你的Gin中使用JWT 传统的Cookie-Sesson模式占用服务器内存, 拓展性…

C++ 多态性——纯虚函数与抽象类

抽象类是一种特殊的类,它为一个类族提供统一的操作界面。抽象类是为了抽象和设计的目的而建立的。可以说,建立抽象类,就是为了通过它多态地使用其中的成员函数。抽象类处于类层次的上层,一个抽象类自身无法实例化,也就…

提升招标文件准确性:校对软件助力招标流程优化

招标文件的准确性对于一个招标项目的成功非常重要。校对软件可以在优化招标流程中发挥关键作用,帮助提升招标文件的准确性和质量。以下是一些校对软件如何助力招标流程优化的方式: 1.拼写和语法检查:校对软件可以自动检测和纠正招标文件中的拼…

企业进销存管理流程有哪些? 附进销存管理系统

阅读本文,您可以了解:1、进销存的定义;2、进销存的流程 首先,在了解进销存流程之前,我们必须厘清一个问题? 什么是进销存? 进销存是一个企业管理中常用的术语,是指企业在经营过程中…

机器学习竞赛、CV/NLP 竞赛入门没人带解决办法

我的第一个AI竞赛是在Datawhale夏令营的帮助下参加的。 一周左右的夏令营,让我从环境都配不好的小白到对pytorch基本入门。 夏令营的氛围督促我赶紧学习,赶紧进步;夏令营群里的大佬推荐的入门视频让我pytorch入门。 了解datawhale是通过b站…

【MySQL】deepin安装mysql的cpp开发包

在deepin下安装好mysql后&#xff0c;发现在c语言中没有<mysql.h>的头文件。 而根据ubuntu的办法直接按照mysql的开发包&#xff0c;会出现这种情况&#xff1a; ~/Desktop$ sudo apt-get install libmysqlclient-dev 正在读取软件包列表… 完成 正在分析软件包的依赖关…

优化案例3:高频多union表关联穿插拼接完成计数

优化案例3&#xff1a;高频多union表关联穿插拼接完成计数 1. 引入2. 解决过程2.1 瓶颈定位思想2.2 定位解决过程2.2.1 子部分代码12.2.2 子部分代码2 2.3 优化结果 3. 优化心得 DM技术交流QQ群&#xff1a;940124259 1. 引入 已经很久没有发布文章&#xff0c;快沉底&#x…

C语言内存函数详解

内存函数 本章内容主要讲解&#xff1a;memcpy(内存拷贝函数)&#xff0c;memmove(内存移动函数)&#xff0c;memcmp(内存比较函数)的基本作用和模拟实现。 1.内存函数的介绍 1.memcpy函数 void * memcpy ( void * destination, const void * source, size_t num );函数功能…

购物车功能设计与实现。

购物车功能设计与实现 分析购物车业务流程第一个问题&#xff1a;购物车中的商品、促销信息是静态的还是动态获取的&#xff1f;第二个问题&#xff1a;购物车主要存储哪些数据呢&#xff1f;第三个问题&#xff1a;购物车用什么来存数据购物车存储的数据结构是什么样子的埋坑&…