码到三十五 :
个人主页
心中有诗画,指尖舞代码,目光览世界,步履越千山,人间尽值得 !
目录
- 1️⃣Bean的生命周期流程
- 1.1 BeanDefinition的解析和注册
- 1.2 Bean的实例化
- 1.3 属性填充
- 1.4 Aware回调
- 1.5 初始化前后处理
- 1.6 初始化
- 1.7 销毁前后处理
- 2️⃣扩展接口介绍
- 2.1 BeanDefinition的解析和注册
- 2.2 Bean的实例化
- InstantiationAwareBeanPostProcessor
- SmartInstantiationAwareBeanPostProcessor
- 2.3 属性填充
- BeanPostProcessor
- InstantiationAwareBeanPostProcessor
- 2.4 Aware回调
- Aware接口的扩展类
- 2.5 初始化前后处理
- 2.6 初始化
- InitializingBean
- init-method属性
- 2.7 销毁前后处理
- DestructionAwareBeanPostProcessor
1️⃣Bean的生命周期流程
在Spring5的源码中,Bean的生命周期主要分为以下几个阶段:
1.1 BeanDefinition的解析和注册
这个阶段可以干预的接口包括BeanDefinitionRegistryPostProcessor。
1.2 Bean的实例化
这个阶段可以干预的接口包括InstantiationAwareBeanPostProcessor、SmartInstantiationAwareBeanPostProcessor。
1.3 属性填充
这个阶段可以干预的接口包括BeanPostProcessor、InstantiationAwareBeanPostProcessor。
1.4 Aware回调
这个阶段可以干预的接口包括Aware接口的扩展类,例如ApplicationContextAware、BeanFactoryAware等。
1.5 初始化前后处理
这个阶段可以干预的接口包括BeanPostProcessor、MergedBeanDefinitionPostProcessor。
1.6 初始化
这个阶段可以干预的接口包括InitializingBean、init-method属性。
1.7 销毁前后处理
这个阶段可以干预的接口包括DestructionAwareBeanPostProcessor。
2️⃣扩展接口介绍
下面分别对每个阶段可干预的扩展接口进行详细说明
2.1 BeanDefinition的解析和注册
BeanDefinitionRegistryPostProcessor这个接口的作用是在BeanDefinition被解析和注册之后,在Bean实例化之前修改BeanDefinition的属性。
该接口有一个方法叫做postProcessBeanDefinitionRegistry,会在BeanDefinition被解析之后、实例化之前被调用。通过该方法,开发者可以向Spring容器中动态注册新的bean定义。
2.2 Bean的实例化
InstantiationAwareBeanPostProcessor
InstantiationAwareBeanPostProcessor是BeanPostProcessor的子接口,它会在Bean的实例化之前和之后被调用。开发者可以通过实现该接口提供自己的逻辑,在实例化Bean的过程中进行自定义操作。
该接口共有四个方法:postProcessBeforeInstantiation、postProcessAfterInstantiation、postProcessPropertyValues和postProcessBeforeInitialization。
SmartInstantiationAwareBeanPostProcessor
这个接口继承自InstantiationAwareBeanPostProcessor,它新增了一个方法determineCandidateConstructors,用于手动选择Bean的构造器,以解决自动装配无法完成的情况。
2.3 属性填充
BeanPostProcessor
这个接口的作用是在Bean属性注入之前和之后对Bean进行自定义处理。开发者可以实现该接口为Bean提供定制化支持。
该接口共有两个方法:postProcessBeforeInitialization和postProcessAfterInitialization。
InstantiationAwareBeanPostProcessor
在实例化Bean的过程中,还可以通过实现InstantiationAwareBeanPostProcessor接口来对Bean的属性进行自定义处理。
该接口有三个方法:postProcessBeforeInstantiation、postProcessPropertyValues和postProcessAfterInitialization。
2.4 Aware回调
Aware接口的扩展类
Spring的容器中有很多组件都提供了Aware接口,通过实现这些Aware接口的扩展类,可以向这些组件注入一些Spring容器中的组件,以实现更灵活的定制化。
2.5 初始化前后处理
BeanPostProcessor
BeanPostProcessor可以在Bean的初始化之前和之后对Bean进行自定义处理。该接口共有两个方法:postProcessBeforeInitialization和postProcessAfterInitialization。
MergedBeanDefinitionPostProcessor
该接口继承了BeanPostProcessor接口,并新增了一个方法postProcessMergedBeanDefinition,用于修改BeanDefinition的属性。
2.6 初始化
InitializingBean
如果某个Bean实现了InitializingBean接口,那么它的afterPropertiesSet()方法会在Bean的属性注入完成后被自动调用。开发者可以在该方法中执行一些初始化操作。
init-method属性
如果某个Bean的配置文件中指定了init-method属性,那么Spring容器会在Bean的属性注入完成后,手动调用该方法进行Bean的初始化。
2.7 销毁前后处理
DestructionAwareBeanPostProcessor
这个接口继承自BeanPostProcessor接口,新增了两个方法postProcessBeforeDestruction和requiresDestruction,用于在Bean销毁之前和之后进行自定义处理。