Spring容器中一个bean的生命周期如下:
Bean初始化前
BeanFactoryPostProcessor–>postProcessBeanFactory方法:针对的是BeanFactroy,在BeanFactroy的refresh方法中的invokeBeanFactoryPostProcessors中这一步。
作用:可以获取BeanDefiniton并且赋予一些属性初始值。
Bean初始化过程
构造方法
BeanNameAware–>setBeanName方法:实现BeanNameAware接口,将BeanName传给Bean,在initializeBean过程中调用
作用:Bean可以获取BeanName
ApplicationContextAware–>setApplicationContext方法:实现ApplicationContextAware接口,将ApplicationContext传给Bean,在prepareBeanFactory过程中将ApplicationContextAwareProcessor加到beanFactory,在initializeBean方法中调用postProcessBeforeInitialization
作用:Bean可以获取ApplicationContext
BeanPostProcessor–>postProcessBeforeInitialization方法:不同于BeanFactoryPostProcessor的是,这里针对的是Bean对象本身,在initializeBean方法中的applyBeanPostProcessorsBeforeInitialization方法调用
作用:针对特定的bean可以修改bean的属性等
@PostConstruct方法:通过注解@PostConstruct执行的方法,在构造函数后面执行。
InitializingBean–>afterPropertiesSet方法:实现InitializingBean接口,在initializeBean方法中调用
BeanPostProcessor–>postProcessAfterInitialization方法:初始化Bean之后执行
DisposableBean–>destroy方法:bean的销毁方法,在容器被销毁时候回被调用
作用:执行bean的清理工作等。
演示代码如下,请分别创建如下的文件。自行修改basePackages
1 | //测试类 |