这里先简单总结一下
/**
* @see BeanDefinitionRegistryPostProcessor#postProcessBeanDefinitionRegistry
* bean定义注册表后处理器 允许在常规 BeanFactoryPostProcessor 检测开始之前注册进一步的 bean 定义,用来动态注册beanDefinition;可以注册BeanFactoryPostProcessor类型的bean定义
*
* @see BeanFactoryPostProcessor#postProcessBeanFactory
* 应用程序上下文可以在它们的 bean 定义中自动检测 BeanFactoryPostProcessor bean,并在创建任何其他 bean 之前应用它们
* 一般用来在读取所有的beanDefinition信息之后,实例化之前,通过该接口可进一步自行处理,比如修改beanDefinition等。
*
* @see InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation
* 在bean的几个关键节点上动手脚
* 实例化前, 这个方法如果返回的bean不为空,会跳过Spring默认的实例化过程,
* - BeanPostProcessor 初始化前 初始化后
*
* @see SmartInstantiationAwareBeanPostProcessor#determineCandidateConstructors
* 确定用于给定 bean 的候选构造函数
*
* @see MergedBeanDefinitionPostProcessor#postProcessMergedBeanDefinition
*
* @see InstantiationAwareBeanPostProcessor#postProcessAfterInstantiation
* 实例化后 属性填充前的回调 如果返回false postProcessPropertyValues就不会执行
*
* @see SmartInstantiationAwareBeanPostProcessor#getEarlyBeanReference
* 应用后置处理器SmartInstantiationAwareBeanPostProcessor,允许返回指定bean的早期引用,若没有则直接返回bean
*
* @see InstantiationAwareBeanPostProcessor#postProcessPropertyValues
* 5.1版本以InstantiationAwareBeanPostProcessor#postProcessProperties替代
* 进行属性填充前的再次处理。例子:现在最常用的@Autowire属性注入就是这边注入依赖的bean实例对象
*
* @see ApplicationContextAwareProcessor#invokeAwareInterfaces
*
* @see BeanPostProcessor#postProcessBeforeInitialization
* @see PostConstruct
* @see InitDestroyAnnotationBeanPostProcessor#postProcessBeforeInitialization
* 在任何 bean 初始化回调(如 InitializingBean 的afterPropertiesSet或自定义初始化方法)之前,
* 将此 BeanPostProcessor 应用于给定的新 bean 实例。 bean 将已填充有属性值。 返回的 bean 实例可能是原始实例的包装器
*
* @see InitializingBean#afterPropertiesSet
* 此方法允许 bean 实例在设置所有 bean 属性后执行其整体配置和最终初始化的验证
*
* @see BeanPostProcessor#postProcessAfterInitialization
* 在任何 bean 初始化回调(如 InitializingBean 的afterPropertiesSet或自定义初始化方法)之后,
* 将此 BeanPostProcessor 应用于给定的新 bean 实例。 bean 将已填充有属性值。 返回的 bean 实例可能是原始实例的包装器。
* 与所有其他 BeanPostProcessor 回调相比,此回调也将在由
* InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation方法触发的短路后调用。
*/
今天用代码验证了一下,实际的执行顺序如下