Spring的bean的生命周期

这Spring框架中,一旦把一个bean纳入到Spring IoC容器之中,这个bean的生命周期就会交由容器进行管理,一般担当管理者角色的是BeanFactory或ApplicationContext。认识一下Bean的生命周期活动,对更好的利用它有很大的帮助。

bean的生命周期:定义,初始化,使用,销毁。

这里仅以下面的两种方式来说明bean的生命周期:

1,调用Bean的构造函数(或者工厂方法)实例化Bean.
2,对Bean的成员变量赋值.
3,如果Bean实现了InitializingBean,调用Bean的afterPropertiesSet方法.
4,如果Bean配置了init-method方法,调用init-method配置的Bean方法.
5,Bean处于可以使用的状态.
6,Spring容器关闭.
7,如果Bean实现了DisposableBean,调用Bean的destroy方法.
8,如果Bean配置了destroy-method方法,调用destroy-method配置的Bean的方法.


Bean自身的方法:配置文件中的init-method和destroy-method配置的方法、Bean对象自己调用的方法
Bean级生命周期接口方法:BeanNameAware、BeanFactoryAware、InitializingBean、DiposableBean等接口中的方法
容器级生命周期接口方法:InstantiationAwareBeanPostProcessor、BeanPostProcessor等后置处理器实现类中重写的方法

简单的bean的生命周期:

一、bean初始化两种方式:

1.实现org.springframework.beans.factory.InitializingBean接口,覆盖afterPropertiesSet方法

2.配置init-method

二、bean销毁两种方式:

1.实现org.springframework.beans.factory.DisposableBean接口覆盖destroy方法
2.配置destroy-method

(1)配置init-method和destroy-method

Spring的bean的生命周期_第1张图片

配置:

 

测试:
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
ac.getBean("person");

运行结果:

初始化
销毁

在启动IOC容器,加载bean,同时调用init-method的方法,关闭IOC容器,同时调用destory-method的方法。

(2)实现接口

Spring的bean的生命周期_第2张图片

配置:

 

测试:
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
ac.getBean("person");

运行结果:

InitializingBean的初始化
DisposableBean的销毁

三、配置全局初始化、销毁方法

Spring的bean的生命周期_第3张图片

配置:


default-init-method="defaultInit" default-destroy-method="defaultDestory">

 


测试:
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
ac.getBean("person");

运行结果:

defaultDestory初始化
defaultDestory销毁

当三种方法同时使用时:

运行结果:

InitializingBean的初始化

初始化

销毁

DisposableBean的销毁

注意:
当三种方式同时使用时,全局(默认的)初始化销毁方法会被覆盖。
另外实现接口的初始化/销毁方式会先于配置文件中的初始化/销毁方式执行。
即使没有以上三种初始化方法也是可以编译执行的

学习笔记
分类类型 所包含方法
Bean自身的方法 配置文件中的init-method和destroy-method配置的方法、Bean对象自己调用的方法
Bean级生命周期接口方法 BeanNameAware、BeanFactoryAware、InitializingBean、DiposableBean等接口中的方法
容器级生命周期接口方法 InstantiationAwareBeanPostProcessor、BeanPostProcessor等后置处理器实现类中重写的方法

你可能感兴趣的:(Spring框架)