大家好,这期主题就是Spring Bean的生命周期
什么是Spring Bean:
通俗的讲,Spring Bean就是spring容器帮助我们管理的bean对象。
下面,我们就进入到Spring Bean的生命周期的学习
bean会经历以下四个阶段:
①实例化 CreateBeanInstance
②属性赋值 PopulateBean
③初始化 Initialization
④销毁 Destruction**
其中有多个增强接口贯穿了这四个阶段
Spring Bean生命周期中的增强接口
在实例化之前,工厂后处理器(实现BeanFactoryPostProcessor或BeanDefinitionRegistryPostProcessor接口,重写方法)、对BeanDefinition信息对象的注册或修改
public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
System.out.println("进入MyBeanFactoryPostProcessor的postProcessBeanFactory方法");
// 修改
// BeanDefinition student = configurableListableBeanFactory.getBeanDefinition("student");
// student.setBeanClassName("com.apesource.pojo.User");
//注册
BeanDefinition beanDefinition = new RootBeanDefinition();
beanDefinition.setBeanClassName("com.apesource.pojo.User");
DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) configurableListableBeanFactory;
defaultListableBeanFactory.registerBeanDefinition("user",beanDefinition);
}
}
属性赋值完成后,完成各种Aware接口,作用:为Bean生命周期的各个阶段提供扩展
EnvironmentAware
实现该接口,项目启动时,可以获取环境变量配置。
BeanFactoryAware
获取加载该Bean的Bean工厂,可以动态加载Bean.
ApplicationEventPublisherAware
可以i获取ApplicationEventPublisher,ApplicationEventPublisher可以用来发布事件,结合ApplicationListener来共同使用,下文在介绍ApplicationListener时会详细提到。这个对象也可以通过spring注入的方式来获得
ResourceLoaderAware
可以获取ResourceLoader,ResourceLoader可以获取classpath内所有的资源对象。
BeanNameAware
注入Bean的名字。
Aware接口执行完毕,执行BeanPostPocessor前置处理(实现BeanPostProcessor接口,重写before方法 )
紧接着,执行系统初始化:Bean要实现InitializingBean接口,执行 afeterPropertiesSet()方法
自定义初始化:xml文件<bean>标签内加(init-method="方法名")属性
执行BeanPostPocessor后置处理(实现BeanPostProcessor接口,重写after方法 )
当以上的流程都执行完毕,那么我们的Bean就已经被创建了,可以正常使用
执行DisposableBean销毁Bean
当Bean 不再需要时,会经过清理阶段,如果Bean实现了DisposableBean这个接口,会调用其实现的destroy()方法执行销毁。
以上就是我对Spring Bean的生命周期的浅浅理解,如有不足,可以在评论内指出,一定虚心学习