SpringBean的生命周期

时间:2021-07-11 14:42:57

    传统的Java应用,Bean的生命周期很简单。使用Java关键字new 进行Bean的实例化,然后Bean就可以使用了。一旦该Bean不再被使用,则由Java自动进行垃圾回收。

相比之下,Spring容器中的Bean的生命周期就显得细腻的多了,如图所示:

        SpringBean的生命周期

1、Spring对Bean进行实例化。

2、Spring将值和Bean的引用注入进Bean对应的属性中。

3、如果Bean实现了BeanNameAware接口,Spring将Bean的ID传递给setBeanName()接口方法。

4、如果Bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory()接口方法,将BeanFactory容器实例传入。

5、如果Bean实现了ApplcationContextAware接口,Spring将调用setApplicationContext()接口方法,将应用上下文的引用传入。

6、如果Bean实现了BeanPostProcessor接口,Spring将调用postProcessBeforeInittializtion()接口方法。

7、如果Bean实现了InitializingBean接口,Spring将调用它们的afterPropertiesSet()接口方法,类似的,如果Bean使用init-method声明了初始化方法,  该方法也会被调用。

8、如果Bean实现了BeanPostProcessor接口,Spring将调用它的postProcessAfterInitialization()方法。

9、此时此刻,Bean已经准备就绪,可以被应用程序使用,它们将一直驻留在应用上下文中,直到应用上下文被销毁。

10、如果Bean实现了DisposableBean接口,Spring将调用它的destory()接口方法。同样,Bean使用destory-method生命了销毁方法,该方法也会被调用。

总结:

Bean的生命周期从Spring容器开始实例化Bean到销毁可以从以下三点来理解:

1、bean自身的方法:包括构造方法、set方法、init-method指定的方法、destroy-method指定的方法

2、Bean级生命周期接口方法:如BeanNameAwareBeanFactoryAware等这些接口方法由bean类实现。

3、容器级生命周期接口方法:BeanPostProcessor等,一般称为后处理器。他们一般不由bean本身实现,独立存在,注册到spring容器中。Spring通过接口反射预先知道,当spring容器创建任何bean时,这些后处理器都会发生作用。所以他们是全局的,用户可以通过编码对只感兴趣的bean进行处理。