Spring源码解析之BeanPostProcessor知识总结
作者:随波逐流baby 发布时间:2022-04-07 22:13:34
标签:BeanPostProcessor,接口
一、简介
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


猜你喜欢
- 本文实例讲述了java基于递归算法实现汉诺塔问题。分享给大家供大家参考,具体如下:package test;import java.util
- 项目需要对接外部接口,将图片文件流发送到外部接口,下面代码就是HttpsURLConnection如何上传文件流:/** *
- Room其实就是一个orm,抽象了SQLite的使用,但是它作为Android的亲儿子orm,并且原生支持LiveData和Rxjava嵌套
- 一、Java 运行时数据区域友情提示:这部分内容可能大部分同学都有一定的了解了,可以跳过直接进入下一小节哈。Java 虚拟机在执行 Java
- 本文实例讲述了Java Socket实现单线程通信的方法。分享给大家供大家参考,具体如下:现在做Java直接使用Socket的情况是越来越少
- 环境与版本本文出来之前的一篇文章中的hibernate的相关lib 外Java事务管理之Hibernate还需要加入spring的lib 包
- 代码优化细节 1、尽量指定类、方法的final修饰符带有final修饰符的类是不可派生的。在Java核心API中,有许多应用fin
- Unity 有点击屏幕进行移动操作,通过Input.GetMouseButtonDown(0)。如果点击到了一些UI上面会触发点击屏幕事件。
- Java SSM框架即指Spring+SpringMVC+MyBatis的简称,框架集由Spring、MyBatis两个开源框架整合而成(S
- 本文实例为大家分享了C#以流方式读socket超时设置的具体代码,供大家参考,具体内容如下using System;using System
- 本文在实现雪花效果的基础上,根据漫天飞舞雪花,实现下雨天场景的效果,使用eclipse android 版本,具体内容如下雪花效果图:具体代
- 创建maven父子工程时遇到一个问题,当子工程的名称前缀和父工程的名称一样时,子工程会出现一系列的问题。比如我的父工程名称是microser
- 本文实例讲述了WinForm中comboBox控件数据绑定实现方法。分享给大家供大家参考,具体如下:下面介绍三种对comboBox绑定的方式
- Android 调用系统应用的方法总结1、调用系统拍照Intent intent = new Intent("andr
- 在web开发中,我们可能会有这样的需求,为了便于前台的JS的处理,我们需要将查询出的数据源格式比如:List<T>、DataTa
- 1、静态函数只能在声明它的文件中可见,其他文件不能引用该函数。2、不同的文件可以使用相同名字的静态函数,互不影响。3、使用static声明的
- 1, 泛型接口的协变如果泛型类型用out关键字标注,泛型接口就是协变的。这也意味着返回类型只能是T。泛型接口的抗变如果泛型类型用in关键字标
- 概述:@ResponseBody @RequestMapping(value="/download/{fileName:[a-zA
- 目录一、Eureka概述1、Eureka特点2、Eureka两大组件3、Eureka三大角色二、Eureka Server服务注册中心1、p
- Spring框架的关键组件是面向方面编程(AOP)框架。面向方面的编程不仅打破程序逻辑分成不同的部分称为所谓的担忧。跨越多个点的应用程序的功