生命周期的九大后置处理器
第一次调用后置处理器org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#resolveBeforeInstantiation
调用的是InstantiationAwareBeanPostProcessor --> postProcessBeforeInstantiation方法
当一个bean在实例化之前,判断这个bean要不要产生一些新的对象,InstantiationAwareBeanPostProcessor的postProcessBeforeInstantiation方法可以返回任何类型,如果返回的对象不为null,就调用beanPostProcessor的postProcessAfterInitialization方法;后面的初始化、属性注入、实例化等方法都不会再调用
如果返回null,就正常的执行流程
在spring AOP当中,spring如果判断当前类100%不需要进行增强(判断当前bean是否是advice、pointcut、advisor、aopInfrastructureBean的子类,如果是,无需增强),会把这个bean放到一个map中,并将value置为false,那么在后面进行增强的时候,会排除这个map中的bean

第二次调用后置处理器,该后置处理器推断使用哪个构造函数来初始化bean对象
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#determineConstructorsFromBeanPostProcessors

```
在推断使用哪一个构造函数的时候,会首先判断当前构造函数是否有@Value和@Autowired注解,如果没有,那就校验当前构造方法对应的bean和传来的beanClass是否一样,如果是同一个,就把当前构造函数赋值给defaultConstructor

在第二次调用后置处理器的时候,会返回当前可用的构造函数,由此来决定,使用哪个构造函数来创建bean
```

都三次调用后置处理器
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#applyMergedBeanDefinitionPostProcessors
调用的是MergedBeanDefinitionPostProcessor --> postProcessMergedBeanDefinition 第三个后置处理器,这个后置处理器,待学习之后,再补充;在该后置处理器执行时,会

第四次调用后置处理器
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#getEarlyBeanReference
SmartInstantiationAwareBeanPostProcessor --> getEarlyBeanReference 第四个后置处理器(把创建的对象 放到earlySingletonObjects,解决循环依赖的),处理循环依赖问题会用到这个后置处理器
这里通过后置处理器,暴露出一个ObjectFactory(个人理解是一个bean工厂),可以完成bean的实例化等操作

第五次调用后置处理器
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#populateBean--InstantiationAwareBeanPostProcessor--postProcessAfterInstantiation
调用的是InstantiationAwareBeanPostProcessor --> postProcessAfterInstantiation 第五个后置处理器(判断是否需要填充属性)
如果我们需要在程序中自己注入属性,可以利用这个点,在这里返回false,那么spring就不会调用下面这个后置处理器来注入属性

第六次调用后置处理器
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#populateBean--InstantiationAwareBeanPostProcessor--postProcessPropertyValues
调用的是InstantiationAwareBeanPostProcessor --> postProcessPropertyValues 第六个(处理类的属性值)

第七次调用后置处理器
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#applyBeanPostProcessorsBeforeInitialization
调用的是BeanPostProcessor --> postProcessBeforeInitialization bean初始化方法执行之前执行这个方法

第八次调用后置处理器
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#applyBeanPostProcessorsAfterInitialization
调用的是BeanPostProcessor --> postProcessAfterInitialization bean初始化之后执行的方法(处理AOP)

第九次是在销毁bean容器的时候调用的
在调用ac.close()方法的时候,会调用该后置处理器 org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor#postProcessBeforeDestruction

以上是spring声明周期中需要用到的几个后置处理器,后面再持续更新补充

最新文章

  1. .net Core学习笔记:Windows环境搭建
  2. svn更新操作时提示database is locked
  3. sublime text3 快捷方式汇总
  4. centos基本操作
  5. Angularjs,WebAPI 搭建一个简易权限管理系统 —— Angularjs 前端主体结构(五)
  6. 【iHMI43 4.3寸液晶模块】demo竖屏例程(版本1.01)发布
  7. Math.Round函數
  8. 网站网页生成.shtml访问无法显示
  9. 关于Java安全的书
  10. vector容器经常用法
  11. 14.3.5.1 An InnoDB Deadlock Example
  12. 对SA权限的再突破 (对付xplog70.dll被删)转载
  13. BZOJ 3299: [USACO2011 Open]Corn Maze玉米迷宫(BFS)
  14. 使用jmeter执行多条sql语句
  15. 剑指offer面试题27:二叉搜索树与双向链表
  16. mssql sqlserver 使用sql脚本检测数据表中一列数据是否连续的方法分享
  17. C#获取当前主机硬件信息
  18. 小程序block标签配合if和else
  19. chkconfig 管理系统服务
  20. 手动制作openstack CentOS 镜像

热门文章

  1. 利用堆来处理Top K问题
  2. python内置的进制转换方法
  3. 【前端】之JavaScript基础知识
  4. gganimate|创建可视化动图,让你的图表会说话
  5. JDK官方下载
  6. 2019-2020-3 20199317《Linux内核原理与分析》第三周作业
  7. 浅谈css样式之list-type
  8. 用墨卡托和GPS坐标计算距离时误差测试
  9. 【Python成长之路】python 基础篇 -- global/nonlocal关键字使用
  10. 谁说微服务是Spring Cloud的独角戏?Service Mesh了解一下?