Spring Bean的生命周期(钩子函数)

借鉴:https://www.cnblogs.com/liweimingbk/p/17843970.html
https://blog.csdn.net/lxz352907839/article/details/128634404

一、Spring Bean生命周期

在这里插入图片描述
如果Spring配置文件中所定义的Bean类实现了ApplicationContextAware 接口,那么在加载Spring配置文件时,会自动调用ApplicationContextAware 接口中的setApplicationContext,自动的将ApplicationContext注入进来。

二:Bean 实例加载阶段

1、BeanFactory 容器类型

钩子执行顺序与博文顺序一致,即 1->n

1)、@PostConstruct
2)、InitializingBean
3)、init-method
4)、@PreDestroy
5)、DisposableBean
6)、destroy-method

2、ApplicationContext 容器类型

1)、AbstractApplicationContext#initPropertySources
2)、AbstractApplicationContext 其他可被子类重写的方法
3)、BeanNameAware
4)、BeanClassLoaderAware
5)、ApplicationContextAware
6)、其他类型 Aware
7)、AbstractApplicationContext#postProcessBeanFactory
8)、执行注册的 BeanFactoryPostProcessor#postProcessBeanDefinitionRegistry
9)、AbstractApplicationContext#onRefresh
10)、广播 earlyApplicationEvents(容器启动就发布的事件)
11)、配置 Converter<S, T>
12)、初始化 bean 之前执行 BeanPostProcessor#postProcessBeforeInitialization
9)、@PostConstruct
10)、InitializingBean
11)、init-method
12)、初始化 bean 后执行 BeanPostProcessor#postProcessAfterInitialization
12)、程序执行中触发的 ApplicationListener
8)、@PreDestroy
9)、DisposableBean
10)、destroy-method

使用 ApplicationContext.registerShutdownHook() 关闭钩子,让销毁回调函数自动触发

三:Spring框架预留的钩子函数(接口)和方法

spring详细加载全过程如下:

调用 BeanNameAware 的 setBeanName 方法
调用 BeanFactoryAware 的 setBeanFactory 方法
调用 ApplicationContextAware 的 setApplicationContext
调用 InitializingBean 的 afterPropertiesSet 或者没有实现这个接口,但指定了@Bean(initMethod=“不加括号的方法名”),会执行这个方法
调用 BeanPostProcessor 的 postProcessBeforeInitialization 方法
调用 BeanPostProcessor 的 postProcessAfterInitialization 方法
Bean 初始化完成,可以被使用
容器关闭前,调用 DisposableBean 的 destroy 方法

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

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

相关文章

php composer安装

引言 Composer 是 PHP 中的依赖管理工具。它允许您声明您的项目所依赖的库&#xff0c;并且它将为您管理&#xff08;安装/更新&#xff09;它们。 官网链接&#xff1a;Introduction - Composer 安装 要在当前目录中快速安装 Composer&#xff0c;请在终端中运行以下脚本。…

Flood Fill算法总结

算法思想 从一个起点开始&#xff0c;每一次随机选择一个新加进来的格子&#xff0c;看一下它周围能否扩展新的格子。如果能扩展&#xff0c;那么就扩展进来&#xff0c;直到不能扩展新的格子为止。当然需要判重&#xff0c;同样一个格子只能覆盖一次&#xff0c;这样能够保证时…

DataLoader与Dataset

一、人民币二分类 二、DataLoader 与 Dataset DataLoader torch.utils.data.DataLoader 功能&#xff1a;构建可迭代的数据装载器 &#xff08;只标注了较为重要的&#xff09; • dataset: Dataset类&#xff0c;决定数据从哪读取及如何读取 • batchsize : 批大小 • num_…

数据库之事务

1.事务的定义 事务就是一组数据库操作序列&#xff08;包含一个或多个SQL操作命令&#xff09;&#xff0c;事务会把所有操作看作是一个不可分割的整体向数据库系统提交或者撤销操作&#xff0c;所有操作要么都执行&#xff0c;要么都不执行。 2. 事务的ACID特性 原子性 一…

机器学习异常值处理 逻辑汇总一

一 清除数据中恒定不变值 如果某个数据长时间不变&#xff0c;默认异常&#xff0c;清除掉该部分数据&#xff1a; # 使用 shift 和 cumsum 来创建一个分组键&#xff0c;每次值改变都会增加组号 g (df[沉淀池3号进水流量] ! df[沉淀池3号进水流量].shift()).cumsum()# 使用…

案例253:基于微信小程序的懂球短视频管理系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SpringBoot JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder …

GC8549 大电流,双通道 12V,短地短电源保护等功能 可替代ONSEMI的LV8548/LV8549

GC8549 可以工作在 3.8~12V 的电源电压上&#xff0c;每 通道能提供高达 1.5A 持续输出电流或者 2.5A 峰值 电流&#xff0c;睡眠模式下功耗小于 1uA。具有 PWM&#xff08;IN/EN&#xff09;输入接口,与行业标 准器件兼容&#xff0c;并具有过温保护&#xff0c;欠压保护&…

【计算机网络】网络层

文章目录 网络层提供的服务虚电路数据报服务虚电路与数据报服务比较 虚拟互连网络IP地址IP层次结构IP地址分类特殊地址子网掩码 子网划分变长子网划分超网合并网络规律 IP地址与MAC地址ARP协议ARP欺骗的应用 数据包数据包首部 路由ICMP协议RIP动态路由协议OSPF协议BGP协议 VPNN…

进程等待(wait和wait函数)【Linux】

进程等待 wait和wait函数【Linux】 进程等待的概念进程等待的必要性进程等待的方法wait函数waitpid函数 非阻塞等待和阻塞等待的对比阻塞等待&#xff1a;非阻塞等待 进程等待的概念 进程等待就是通过 wait/waitpid的方式&#xff0c;让父进程对子进程进行等待子进程退出并且将…

【信号处理:小波包转换(WPT)/小波包分解(WPD) 】

【信号处理&#xff1a;小波包转换&#xff08;WPT&#xff09;/小波包分解&#xff08;WPD&#xff09; 】 小波包变换简介WPT/WPD的基础知识WPT/WPD的主要特点The Wavelet Packet Transform 小波包变换前向小波数据包变换最佳基础和成本函数数学中波纹的最佳基础其他成本函数…

MySQL基础入门:数据库操作全攻略

欢迎进入MySQL的世界&#xff01;MySQL是最受欢迎的关系型数据库管理系统之一&#xff0c;在Web开发中广泛使用。无论你是学生、软件开发者还是数据分析师&#xff0c;掌握MySQL的基本操作对你探索数据世界将大有裨益。在本教程中&#xff0c;我们将从MySQL的安装开始&#xff…

酷狗高级Java面试真题

今年IT寒冬&#xff0c;大厂都裁员或者准备裁员&#xff0c;作为开猿节流主要目标之一&#xff0c;我们更应该时刻保持竞争力。为了抱团取暖&#xff0c;林老师开通了《知识星球》&#xff0c;并邀请我阿里、快手、腾讯等的朋友加入&#xff0c;分享八股文、项目经验、管理经验…

uView LoadingPage 加载页

平台差异说明 App&#xff08;vue&#xff09;App&#xff08;nvue&#xff09;H5小程序√√√√ #基本使用 <template><view><u-loading-page></u-loading-page></view> </template>copy #显示或隐藏 loading可以指定是否显示加载页…

洛谷普及组P1044栈,题目讲解(无数论基础,纯打表找规律)

[NOIP2003 普及组] 栈 - 洛谷 我先写了个打表的代码&#xff0c;写了一个小时&#xff0c;o(╥﹏╥)o只能说我真不擅长dfs。 int n; std::unordered_map<std::string, int>map; void dfs(std::vector<int>&a, int step,std::stack<int>p, std::string …

Nginx中include配置文件,方便管理多域名

目录 1.加上include配置 2.配置 server 记录 一个网站对应一个server 记录&#xff0c;这样管理起来相对麻烦。我们可以将每个网站记录单独拆分出来即可&#xff0c;这就需要用到 nginx 中的 conf.d 文件 1.加上include配置 先进入到 nginx.conf 文件&#xff0c;然后将所有…

CentOS7搭建Elasticsearch与Kibana服务

1.部署单点es 1.1.创建网络 因为我们还需要部署kibana容器&#xff0c;因此需要让es和kibana容器互联。这里先创建一个网络&#xff1a; docker network create es-net 1.2拉取elasticsearch镜像 docker pull elasticsearch:7.11.1 1.3.运行 运行docker命令&#xff0c;部…

阿里云ESSD Entry系统盘性能如何?

阿里云服务器ESSD Entry系统盘性能怎么样&#xff1f;性能很不错&#xff0c;但不如SSD云盘和ESSD云盘&#xff0c;ESSD Entry云盘的IOPS、吞吐量不如SSD云盘和ESSD云盘。ESSD Entry系统盘是具备企业级特性及数据保护能力&#xff0c;建议在开发与测试业务和系统盘等场景中使用…

c# wpf 的触发器,触发器Trigger种类,每个触发器的使用说明

触发器是一种强大的声明性机制&#xff0c;用于根据指定条件更改控件的外观或行为。触发器主要分为以下几种类型&#xff1a; Property Trigger 说明&#xff1a;当绑定到控件某个依赖属性的值发生改变时&#xff0c;Property Trigger会执行预定义的一组设置。例如&#xff0c;…

【ECMAScript】WebSocket模拟HTTP功能的实践:Promise+WebSocket+EventEmitter+Queue

1. 前言 本篇将结合Promise、WebSocket、EventEmitter和Queue&#xff0c;做一次实践&#xff1a;用WebSocket来模拟HTTP的功能。先不用关心它的用处&#xff0c;就当一次对知识点的整合吧。 2. MockHTTP 方法说明request(params, callback?) 功能&#xff1a;发起请求&…

paddle v4 hubserving 部署

环境准备&#xff1a;https://github.com/PaddlePaddle/PaddleOCR/tree/release/2.7/deploy/hubserving#24-%E5%90%AF%E5%8A%A8%E6%9C%8D%E5%8A%A1 服务器启动命令 hub serving start -c deploy/hubserving/ocr_system/config.json客户端请求 python tools/test_hubserving.…