bean生命周期
2021-03-31 01:58:00 42 举报
Bean生命周期是指一个Java对象从创建到销毁的过程。在Spring框架中,当一个Bean被创建后,会经历一系列的生命周期阶段,包括实例化、属性注入、调用初始化方法、使用(业务逻辑处理)、销毁等。在这个过程中,Spring容器负责管理Bean的整个生命周期,确保每个Bean都能按照预期的方式运行。同时,开发者也可以通过自定义一些方法来干预Bean的生命周期,例如实现`InitializingBean`接口来覆盖默认的初始化逻辑,或者实现`DisposableBean`接口来释放资源等。总之,了解Bean生命周期对于编写高质量的Spring应用非常重要。
作者其他创作
大纲/内容
1.先执行实现了PriorityOrdered接口的最先执行
MergedBeanDefinitionPostProcessor#postProcessMergedBeanDefinition
2.执行实现了Ordered接口的次之
没有实现PriorityOrdered和Ordered接口的BeanDefinitionRegistryPostProcessor最后执行
初始化之后执行initializeBean 方法完毕
@PostConstruct在这执行bean初始化时执行顺序如下:1.@PostConstruct标注方法2.InitializingBean接口的方法3.initMethod标识的方法
afterPropertiesSet、init方法
SmartInstantiationAwareBeanPostProcessor#determineCandidateConstructors
初始化之前执行注意: 这里是个短路方法,别返回null就停止
doCreateBean
如果第1步不为空,则执行
1.bean里面的close方法2.实现了DisposableBean接口的bean的destroy方法3.InitDestroyAnnotationBeanPostProcessor#postProcessBeforeDestruction(@PreDestroy注解)
如果上面返回null(postProcessProperties方法),那么执行这个方法
BeanPostProcessor#postProcessBeforeInitialization
initializeBean方法开始
InstantiationAwareBeanPostProcessor#postProcessPropertyValues
2.实现了Ordered接口的次之
InstantiationAwareBeanPostProcessor#postProcessProperties
3.没有实现PriorityOrdered和Ordered接口的BeanFactoryPostProcessor最后执行
说明:蓝色的部分是beanDefinition相关(bean的模板构建阶段)
创建bean的入口
BeanPostProcessor#postProcessAfterInitialization
BeanNameAware、BeanClassLoaderAware、BeanFactoryAware 设置值
2.InstantiationAwareBeanPostProcessor#applyBeanPostProcessorsAfterInitialization
1.InstantiationAwareBeanPostProcessor#applyBeanPostProcessorsBeforeInstantiation
populateBean方法开始实例化之后执行
给bean注入属性
bean销毁时时执行顺序如下:1.@PreDestroy标注方法2.destroy接口的方法3.destroyMethod标识的方法
ConfigurationClassPostProcessor#postProcessBeanDefinitionRegistry扫描注解生成那个beanDefinition
AbstractApplicationContext#getBean开始创建bean对象
这三个可以用来实现客户自定义注入bean(beanDefinition);执行所有实现了BeanDefinitionRegistryPostProcessor的BeanFactoryPostProcessor方法
1.实现了PriorityOrdered接口的最先执行
在实例化之前,确定实例化使用的构造器
实例化bean
销毁beanAbstractApplicationContext.close
BeanDefinitionRegistryPostProcessor#postProcessBeanFactory
InstantiationAwareBeanPostProcessor#postProcessAfterInstantiation
执行所有的BeanFactoryPostProcessor的postProcessBeanFactory方法
收藏
收藏
0 条评论
下一页