SpringBean 生命周期
2023-02-02 09:44:30 15 举报
SpringBean的生命周期包括实例化、属性赋值、初始化、销毁四个阶段。在实例化阶段,Spring通过反射机制创建Bean实例;在属性赋值阶段,Spring将Bean的属性值注入到实例中;在初始化阶段,Spring调用Bean的初始化方法进行必要的设置;在销毁阶段,Spring通过调用Bean的销毁方法进行资源释放。此外,Spring还提供了单例和原型两种Bean的作用域,以及基于注解的配置方式,使得开发者可以更加灵活地管理Bean的生命周期。
作者其他创作
大纲/内容
第4步:调用BeanFactoryAware的 setBeanFactory方法
第9步:BeanPostProcessor的 后 初始化方法
SpringBean A
1. A 对象在实例化之后立马放入到三级缓存(提前暴露自己)
5. 使用一级缓存中的B
将准备就绪的Bean 交给调用者
Spring 容器启动的过程中,会将 Bean 解析成 Spring 内部的 BeanDefinition 结构
第6步:调用BeanPostProcessor的 预 初始化方法
注意:Spring 为 Bean 提供了细致全面的生命周期过程,通过实现特定的接口或 <bean> 的属性设置,都可以对 Bean 的生命周期过程产生影响;虽然可以随意配置 <bean> 的属性,但是建议不要过多的使用 Bean 实现接口,因为这样会导致代码和 Spring 的聚合过于紧密
第7步:调用 InitializingBean的 afterPropertiesSet 方法
调用 DisposableBean的 destroy 方法
二级:earlySingletonObjects
第8步:调用定制的初始化方法init-method
SpringBean 的生命周期图
类名:scope、属性、构造函数参数列表、依赖的bean、是否是单例类、是否是懒加载等,其实就是将 Bean 的定义信息存储到这个 BeanDefinition 相应的属性中,后面对 Bean 的 操作就直接对 BeanDefinition进行,例如拿到这个 BeanDefinition后,可以根据里面的类名、构造函数、构造函数参数,使用反射进行对象创建
3. 升级过程中可以做一些扩展操作
三级:singletonFactories
Spring 缓冲池中准备就绪的Bean
第1步:实例化Bean
依赖
第5步:调用ApplicationContextAware的 setApplicationContext方法
1. 根据配置情况调用 Bean 构造方法或工厂方法实例化 Bean2. 利用 依赖注入完成 Bean 中所有属性值的配置注入3. 如果 Bean 实现了 BeanNameAware 接口,则Spring 调用 Bean 的 setBeanName() 方法传入当前 Bean 的 id 值4. 如果 Bean 实现了 BeanFactoryAware 接口,则 Spring 调用 Bean 的 setBeanFactory() 方法 传入当前工厂实例的引用5. 如果 Bean 实现了 ApplicationContextAware 接口,则 Spring 调用 setApplicationContext() 方法传入当前 ApplicationContext 的实例引用。6. 如果 BeanPsotProcessor 和 Bean 关联,则 Spring 将调用该接口的预初始化方法 postProcessBeforeInitialization() 对 Bean 进行加工操作,此处非常重要,Spring AOP 就是利用它实现的。7. 如果 Bean 实现了 InitializingBean 接口,则 Spring 将调用 afterPropertiesSet() 方法。8. 如果在配置文件中通过 init-method 属性指定了初始化方法,则调用该初始化方法。9. 如果 BeanPsotProcessor 和 Bean 关联,则 Spring 将调用该接口的后初始化方法 postProcessAfterInitialization() ,此时 Bean 已经可以被应用系统使用了。10. 如果在 <bean> 中指定了该 Bean 的作用范围为 scope=\"singleton\",则将该 Bean 放入 Spring IoC 的缓冲池中,将触发 Spring 对该Bean 的生命周期管理;如果在 <bean> 中指定了该 Bean 的作用范围为 scope=\"prototype\",则将该 Bean 交给调用者。11. 如果 Bean 实现了 DisposableBean 接口,则 Spring 会调用 destory() 方法将 Spring 中的 Bean 销毁;如果在配置文件中通过 destory-method 属性指定了 Bean 的销毁方法,则 Spring 将调用该方法对 Bean 进行销毁
一级:singletonObjects 成型 SpringBean 的缓存
SpringBean B
2. B在创建过程中发现依赖于A,那么去三级缓存中使用尚未成型的Bean A,升级放到二级缓存中
第3步:调用BeanNameAware的 setBeanName 方法
比如通过反射实例化对象
4. B 创建完成之后会放入一级缓存
Spring IoC 中 循环依赖
第2步:设置属性值
三级缓存
调用 destory-method属性配置的销毁方法
0 条评论
下一页