spring bean生命周期

spring bean生命周期,第1张

spring bean生命周期

阶段1:处理名称,检查缓存

先把别名解析为实际名称,再进行后续处理

若要FactoryBean本身,需要使用&名称获取

singletonObjects是一级缓存,放单例成品对象

singletonFactories是三级缓存,放单例工厂

earlySingletonObjects是二级缓存,放单例工厂的产品,可称为提前单例对象

阶段2:处理父子容器

1.父子容器的bean名称可以重复

2.优先找子容器的bean,找到了直接返回,找不到继续到父容器找

阶段3: dependsOn

dependson用在非显式依赖的bean的创建顺序控制

阶段4:按Scope创建bean

scope理解为从xxx范围内找这个bean更加贴切

singleton scope表示从单例池范围内获取bean,如果没有,则创建并放入单例池

prototype scope表示从不缓存bean,每次都创建新的

request scope表示从request对象范围内获取 bean,如果没有,则创建并放入request …

阶段5:创建bean

阶段5-1:创建bean 实例 AutowiredAnnotationBeanPostProcessor选择构造

优先选择带@Autowired注解的构造·若有唯一的带参构造,也会入选

采用默认构造

如果上面的后处理器和BeanDefiniation都没找到构造,采用默认构造,即使是私有的

阶段5-2:依赖注入

优先级高到低:按照精确匹配,按照名字匹配,按照类型自动匹配。

阶段5-3:初始化

阶段5-4:注册可销毁bean 判断依据

如果实现了DisposableBean或AutoCloseable接口,则为可销毁bean

如果自定义了destroyMethod,则为可销毁bean

如果采用@Bean没有指定destroyMethod,则采用自动推断方式获取销毁方法名(close,shutdown)

如果有@PreDestroy标注的方法

存储位置

singleton scope的可销毁bean会存储于beanFactory的成员当中

自定义scope的可销毁bean会存储于对应的域对象当中

prototype scope不会存储,需要自己找到此对象销毁

存储时都会封装为 DisposableBeanAdapter类型对销毁方法的调用进行适配 阶段6:类型转换 阶段7:销毁bean

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/918660.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存