Spring Bean 生命周期

2020-01-26  本文已影响0人  悠悠一支烟

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 方法

上一篇 下一篇

猜你喜欢

热点阅读