Spring Bean 完整的生命周期经历的方法调用可分为以下几类:
1、工厂后处理器接口方法:这个包括了AspectJWeavingEnabler, ConfigurationClassPostProcessor, CustomAutowireConfigurer等等非常有用的工厂后处理器,主要实现BeanFactoryPostProcessor 接口。工厂后处理器也是容器级的。在应用上下文装配配置文件之后立即调用。
2、容器级生命周期接口方法:这个包括了InstantiationAwareBeanPostProcessor 和 BeanPostProcessor 这两个接口实现,一般称它们的实现类为“后处理器”。
3、Bean级生命周期接口方法:这个包括了BeanNameAware、BeanFactoryAware、InitializingBean和DiposableBean这些接口的方法
4、Bean自身的方法:这个包括了Bean本身调用的方法和通过配置文件中<bean>的init-method和destroy-method指定的方法
时序图:

执行顺序:
1.实例化 BeanFactoryPostProcessor 的实现类
2 .执行工厂后处理器接口方法:postProcessBeanFactory 方法
3.实例化BeanPostProcessor接口的 实现类
4.实例化 InstantiationAwareBeanPostProcessorAdapter 实现类, 其实现的是 InstantiationAwareBeanPostProcessor 接口,关注的是 Bean 实例化 后处理器,而 实现BeanPostProcessor 接口类则关注的是 Bean 初始化(Bean 经过构造函数实例化后) 的后处理器。
实现 InstantiationAwareBeanPostProcessor的类: SmartInstantiationAwareBeanPostProcessor
5.执行 InstantiationAwareBeanPostProcessorAdapter 的 postProcessBeforeInstantiation 方法
6.执行Bean的构造器
7.为Bean注入属性
8.调用BeanNameAware 的 setBeanName 方法。(Spring源码中接口以Aware结尾的接口(XXXAware)在Spring中表示对XXX可以感知,通俗点解释就是:如果在某个类里面想要使用spring的一些东西,就可以通过实现XXXAware接口告诉Spring,Spring看到后就会给你送过来,而接收的方式是通过实现接口唯一方法set-XXX.比如:有一个类想要使用当前的ApplicationContext,那么我们只需要让它实现ApplicationContextAware接口,然后实现接口中的唯一方法)
9.调用BeanFactoryWare 的setBeanFactory 方法。
10.执行 BeanPostProcessor 的 postProcessBeforeInitialization 方法
11.调用InitializingBean 的 afterProperitesSet 方法
网友评论