Spring作为当前Java最流行、最强大的轻量级框架,受到了程序员的热烈欢迎。准确的了解Spring Bean的生命周期是非常必要的。我们通常使用ApplicationContext作为Spring容器。这里,我们讲的也是 ApplicationContext中Bean的生命周期。而实际上BeanFactory也是差不多的,只不过处理器需要手动注册。
什么是Spring 生命周期
spring是一个管理各个bean(Java对象)的容器,她也和生命一样有从诞生到活动再到销毁的过程。Spring Bean的完整生命周期从创建Spring容器开始,直到最终Spring容器销毁Bean,这其中包含了一系列关键点。下图是生命周期流程图:
为什么要掌握Spring生命周期
有点类似于aop,当你掌握了Spring生命周期后,你就可以在他的主要生命阶段对其进行改造和配置,从而更好得服务于应用开发.
Spring的生命周期是怎样的
1.BeanFactory也就是容器的创建
2.各个Bean的创建(因为Bean本身是业务的核心,因此对其生命周期更加的关注,分得也更细)
2.1.Bean的构造
2.2.Bean的属性注入
2.3.Bean的自定义初始化
3.容器的关闭月Bean的销毁
如何介入Spring的生命周期
Spring针对期不同的生命阶段提供了不同的类
1.容器级生命周期接口方法 : 这个包括了
InstantiationAwareBeanPostProcessor 和 BeanPostProcessor 这两个接口实现,一般称它们的实现类为“后处理器”。
2.工厂后处理器接口方法 : 这个包括了AspectJWeavingEnabler,
ConfigurationClassPostProcessor, CustomAutowireConfigurer等等非常有用的工厂后处理器 接口的方法。工厂后处理器也是容器级的。在应用上下文装配配置文件之后立即调用。
3.Bean级生命周期接口方法 : 这个包括了BeanNameAware、BeanFactoryAware、ApplicationContextAware,InitializingBean和DiposableBean这些接口的方法
4.Bean自身的方法 : 这个包括了Bean本身调用的方法和通过配置文件中<bean>的init-method和destroy-method指定的方法
常用类的执行顺序
1.BeanFactoryPostProcessor的postProcessBeanFactory方法
2.InstantiationAwareBeanPostProcessor的postProcessBeforeInstantiation方法
3.Bean构造器
4.InstantiationAwareBeanPostProcessor的postProcessPropertyValues方法
5.Bean属性注入
6.BeanNameAware的setBeanName方法
7.BeanFactoryAware的setBeanFactory方法
8.ApplicationContextAware的setApplicationContext方法
4.BeanPostProcessor的
postProcessBeforeInitialization方法
5.InitializingBean的afterPropertiesSet方法
6.自定义的init-methond方法
7.BeanPostProcessor的
postProcessAfterInitialization方法
8.InstantiationAwareBeanPostProcessor的postProcessAfterInitialization方法
8.DisposableBean的detory方法
9.自定义destory-method方法