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 方法

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值