Spring Bean的生命周期?
1
@Component
public class TestBean{
}
2
@Bean
public Object myObject(){
}
常用的是上面这两种:第一种是通过Component注解标注类;第二中方式是在方法上做@Bean的注解。我们都知道,注解标注的方法或者类,便会被spring扫描,并最终生成一个bean。本文不详细讨论bean扫描的过程,只分析bean初始化过程中的一些接口。
那么,Spring 创建 Bean 就可以分为两大步骤,第一步是由Springboot 扫描并获取BeanDefinition;第二部,是初始化Bean。spring 在bean的初始化过程为我们提供了很多的接口,我们可以用它们在bean的生成过程中做一些事情。这些接口均采用回调的方式,以下是部分接口的介绍和回调时机。
接口 | 说明 | 回调时机 |
---|---|---|
BeanNameAware | 如果你的bean实现了该接口的 setName 方法,则可以通过这个方法获取到bean名 | 发生在bean生命周期初期,早于构造方法 |
ApplicationContextAware | 如果一个bean实现了该接口的setApplicationContext 方法,则可以通过此方法获取到ApplicationContext | 调用于生命周期初期,在BeanNameAware和构造方法之间 |
InitializingBean | 此接口的方法为 afterPropertiesSet | 在bean工厂设置完bean的所有属性之后,会回调此方法。回调时机在构造方法之后 |
BeanPostProcessor | 此接口有 postProcessBeforeInitialization、postProcessAfterInitialization两个方法,分别对应了Bean生命周期的两个回调 | 这两个方法也在构造方法之后,不过分别在 InitializingBean 前后 |