Vue Element+Node.js开发企业通用管理后台系统
Spring5源码5-Bean生命周期后置处理器
主要说明三种生命周期增强器:
- BeanFactoryPostProcessor:BeanFactory 后置处理器
- BeanDefinitionRegistryPostProcessor:bean定义注册后置处理器
- BeanFactoryPostProcessor
- BeanPostProcessor:Bean后置处理器
- BeanPostProcessor
- MergedBeanDefinitionPostProcessor
- SmartInstantiationAwareBeanPostProcessor
- InstantiationAwareBeanPostProcessor
- InitializingBean
- DisposableBean (销毁的方案我们暂时不做说明)
1.1 什么是 BeanPostProcessorBeanPostProcessor 是 Spring提供给我们的一个非常重要的扩展接口,并且Spring内部的很多功能也是通过 BeanPostProcessor 来完成的(目前看到最典型的就是 AnnotationAwareAspectJAutoProxyCreator 的 注入)。
1.2 BeanPostProcessor 的种类BeanPostProcessor 在Spring 中的子类非常多(idea 显是有46个),比如
- InstantiationAwareBeanPostProcessorAdapter : 在Spring 的bean加载过程中起了非常重要的作用
- AnnotationAwareAspectJAutoProxyCreator : bean 创建过程中的 属性注入时起作用
- AspectJAwareAdvisorAutoProxyCreator : Aspect 的 AOP 功能实现也全仰仗BeanPostProcessor 的特性。
1.3 创建时机BeanFactoryPostProcessor:在 Spring 启动时对BeanDefinition 的创建 进行干预处理。
BeanPostProcessor:一是Bean对应的BeanDefinition 的创建。二是Bean 实例的创建。因为在 Spring容器中,Bean的创建并非仅仅通过反射创建就结束了,在创建过程中,需要考虑到Bean针对Spring容器中的一些属性,所以BeanDefinition 中不仅仅包含了 Bean Class 文件信息,还包含了 当前Bean在Spring容器中的一些属性,比如在容器中的作用域、是否懒加载、别名等信息。当Bean 进行实例化创建时需要依赖于对应的BeanDefinition 提供对应的信息。。
而由于 BeanPostProcessor 是参与了 Bean 创建过程。所以其创建一定在普通 Bean 之前。实际上 BeanPostProcessor 的创建时在 Spring 启动时容器刷新的时候。
BeanPostProcessor 的 BeanDefinition 创建时机和普通 Bean没有区别,都是在Spring 启动时的BeanFactoryPostProcessor 中完成(确切的说是 ConfigurationClassPostProcessor 中完成)。
而BeanPostProcessor 的实例创建要优先于普通bean创建,Spring启动过程中会调用AbstractApplicationContext#registerBeanPostProcessors 方法。 在这个方法中,Spring 会从容器中获取到所有BeanPostProcessor 类型的beanName, 通过 beanFactory.getBean 方法获取到对应实例,进行排序后注册到 BeanFactory.beanPostProcessors 属性中.当容器需要执行 BeanPostProcessor 方法时可以直接从 beanPostProcessors 中获取即可。
Vue Element+Node.js开发企业通用管理后台系统
download链接:https://pan.baidu.com/s/1AThK9dm0BGIfdsL0gA03cg?pwd=hsjg
提取码:hsjg
--来自百度网盘超级会员V5的分享