Spring Bean生命周期详解

时间:2023-12-22 09:58:20

对象生命周期:创建(实例化----初始化)---使用----销毁,而在Spring中,Bean对象周期当然遵从这一过程,但是Spring提供了许多对外接口,允许开发者对三个过程(实例化、初始化、销毁)的前后做一些操作。在Spring Bean中,实例化是为Bean对象开辟空间(构造函数),初始化则是对属性的初始化,属性注入(setter方法注入属性)。

1.Bean自身方法:init-method/destroy-method,通过为配置文件bean定义中添加相应属性指定相应执行方法。

2.Bean级生命周期接口:BeanNameAware、BeanFactoryAware、InitializingBean和DiposableBean这些接口的方法。每个Bean选择实现,可选择各自的个性化操作。

3.容器级生命周期接口方法:这个包括了InstantiationAwareBeanPostProcessor 和 BeanPostProcessor 这两个接口实现(前者继承自后者),一般称它们的实现类为“后处理器“,这些接口是每个bean实例化或初始化时候都会调用。

4.工厂后处理器接口方法:也是容器级别的,但他们是在上下文装置配置文件之后调用(BeanFactoryPostProcessor、 CustomAutowireConfigurer)。

Bean具体生命周期

1.postProcessBeanFactory(ConfigurableListableBeanFactory c):工厂后处理器,这个事故IoC容器(ApplicationContext)初始化一部分。实现:写一个类,实现BeanFactoryPostProcessor接口,重写该方法,并在

Spring配置文件中配置该类的一个bean。

2.postProcessBeforeInstantiation(Class<?>c,String beanName):所有bean对象(注1)实例化之前执行,具体点就是执行每个bean类构造函数之前。 实现:写一个类,实现InstantiationAwareBeanPostProcessor接

口,重写该方法,在Spring配置文件中配置该类的一个bean。返回一个Object,但是实际上你返回一个null即可。

3.Bean实例化,调用bean类构造函数。

4.postProcessAfterInstantiation(Object bean,String beanName):bean类实例化之后,初始化之前调用。

5.postProcessPropertyValue:属性注入之前调用。

6.setBeanName(String beanName):属性注入后调用,该方法作用是让bean类知道自己所在的Bean的name或者id属性。

7.setBeanFactory(BeanFactory factory):setBeanName后调用,该方法作用是让bean类知道自己所在的BeanFactory的属性。

8.postProcessBeforeInitialization(Object bean,String beanName):BeanPostProcessor作用是对bean实例化、初始化做些预处理操作。

9.postProcessBeforeInitialization(Object bean,Strign beanName)

10.afterPropertiesSet():bean类实现InitializingBean接口,重写该方法。初始化工作,但实现该接口这种方法和Spring耦合,不推荐。

11.postProcessAfterInitialization(Object bean,Strign beanName)

12.postProcessAfterInitialization(Object bean,Strign beanName)

13.程序执行,bean工作

14.destroy():bean销毁前执行。

15.xml_destroy():实现:spring bean配置文件中配置bean属性destroy-method=”xml_destroy”,这个方法名开发者自己定义。

总结:

实例化》初始化》使用》销毁