Spring源码解析之BeanPostProcessor知识总结
作者:随波逐流baby 时间:2022-04-07 22:13:34
一、简介
BeanPostProcessor是Spring IOC容器给我们提供的一个扩展接口。
实例化Bean做前置处理、后置处理
二、接口定义
@Component
public class BeanPost implements BeanPostProcessor {
/**
* 在每个bean创建之后的初始化方法之前调用
* @param bean 当前实例化的bean
* @param beanName bean的名称
* @return 返回实例化的bean或者可以对对象进行再封装返回
* @throws BeansException
*/
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("初始化前"+beanName);
return bean;
}
/**
* 在每个bean的初始化方法执行之后被调用
* @param bean 当前实例化的bean
* @param beanName bean的名称
* @return 返回实例化的bean或者可以对对象进行再封装返回
* @throws BeansException
*/
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("初始化后"+beanName);
return bean;
}
}
运行顺序
实例化bean对象->设置对象属性->检查Aware接口设置依赖
->BeanPostProcessor前置处理->检查是否是initializingBean以决定是否调用afterPropertiesSet方法->检查是否配置自定义init-method->BeanPostProcessor后置处理->注册必要的Destruction相关回调接口->。。。->是否实现DisposableBean接口->是否配置自定义destroy方法
三、源码
1.由AnnotationConfigApplicationContext进入
2.进入构造方法的refresh方法
3.进入到finishBeanFactoryInitialization方法
4.进入preInstantiateSingletons方法
5.执行getBean实例化方法
6创建bean实例
7.doCreateBean
8.进入初始化接口
9.可以看到执行到了BeanPostProcessor 提供的2个方法
进入内部可以看到
10.然后继续往下走开始AWare流程
内部:
11.进入invokeAwareInterfaces(bean);方法
内部:
当前bean实现了ApplicationContextAware接口
12.走到Person类中的setApplicationContext方法
一入源码深似海,苦海无边,回头是岸
来源:https://blog.csdn.net/qq_34351177/article/details/117659127
标签:BeanPostProcessor,接口
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
js 交互在Flutter 中使用 webview_flutter
2023-07-20 22:40:14
![](https://img.aspxhome.com/file/2023/5/91785_0s.jpg)
Java读取json数据并存入数据库的操作代码
2023-09-23 06:00:57
Spring-Data-JPA整合MySQL和配置的方法
2023-10-29 10:19:41
![](https://img.aspxhome.com/file/2023/4/58734_0s.png)
JAVA SPI特性及简单应用代码实例
2021-11-11 14:54:54
![](https://img.aspxhome.com/file/2023/4/63674_0s.png)
基于Java实现简单贪吃蛇游戏
2022-08-07 02:09:44
![](https://img.aspxhome.com/file/2023/8/63488_0s.jpg)
详解java倒计时三种简单实现方式
2023-11-11 16:47:38
![](https://img.aspxhome.com/file/2023/8/62508_0s.png)
详解SpringBoot+SpringSecurity+jwt整合及初体验
2023-11-28 23:54:48
![](https://img.aspxhome.com/file/2023/3/60373_0s.png)
解析Flink内核原理与实现核心抽象
2023-11-25 10:30:04
![](https://img.aspxhome.com/file/2023/8/59868_0s.png)
Spring和SpringBoot之间的区别
2022-09-28 11:47:38
基于Hadoop实现Knn算法
2023-11-27 04:01:20
![](https://img.aspxhome.com/file/2023/8/60048_0s.jpg)
Java Vector实现班级信息管理系统
2023-11-25 03:09:09
![](https://img.aspxhome.com/file/2023/3/60233_0s.jpg)
Spring Boot缓存实战 EhCache示例
2023-08-30 12:23:35
![](https://img.aspxhome.com/file/2023/3/58213_0s.png)
教你开发脚手架集成Spring Boot Actuator监控的详细过程
2021-11-19 03:27:39
IDEA+Maven搭建Spring环境的详细教程
2023-11-25 07:50:34
![](https://img.aspxhome.com/file/2023/0/59880_0s.png)
Java内部类及其特点的讲解
2023-06-09 19:39:41
![](https://img.aspxhome.com/file/2023/7/61657_0s.png)
JVM内存管理之JAVA语言的内存管理详解
2021-11-01 12:00:10
![](https://img.aspxhome.com/file/2023/5/63105_0s.jpg)
Spring Data JPA 映射VO/DTO对象方式
2022-10-13 10:25:27
Spring Boot 2.5.0 重新设计的spring.sql.init 配置有啥用
2021-12-04 00:04:43
Java集合的Collection接口和List接口详解
2021-11-02 05:24:44
springboot+thymeleaf 文件上传功能的实现代码
2023-11-25 05:08:59
![](https://img.aspxhome.com/file/2023/3/60053_0s.png)