栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring Bean的生命周期面试题,来自抖音 :文艺TOM

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Bean的生命周期面试题,来自抖音 :文艺TOM

(这个文章根据抖音的文艺TOM博主抄的,觉得挺好,可以背背,当成面试用,另外我加了一点点)
Spring的生命周期被分为五个阶段:

  1. 创建前准备阶段
  2. 创建实例阶段
  3. 依赖注入阶段
  4. 容器缓存阶段
  5. 销毁实例阶段
创建前准备阶段

这个阶段主要是开始bean加载之前,从spring上下文中去获取相关的配置并且解析,然后找到bean有关的一些配置内容,比如说init-method,容器在初始化bean的时候去调用这个方法,destory-method容器在销毁bean的时候去调用这个方法,以及BeanFactoryPostProcessor这个类的Bean加载过程中前置和后置的处理.这些类或者配置其实是spring提供给开发者用来实现bean加载过程中的一个扩展机制.在很多与spring集成的一些中间件框架也经常使用到,比如说dubbo.

创建实例阶段

这个阶段主要是通过反射去创建bean实例对象,并且扫描和解析bean的声明的一些属性.

依赖注入阶段

这个阶段会监测被实例化的bean是否会存在其他依赖,如果存在其他依赖,就需要将这些依赖注入到bean里面,比如说通过读取注解@Autowired和@Setter等注解去完成依赖注入的配置,这个阶段又会触发一些扩展的调用,比如说常见的扩展类BeanPostProcessors,它用来实现bean初始化前后的一个回调;再比如InitializingBean,这个类里面有一个afterPropertiesSet方法,它给属性去赋值.
其次还会调用一些xxxAware接口:

  • 如果 Bean 实现了 BeanNameAware 接口,则 Spring 调用 Bean 的 setBeanName() 方法传入当前 Bean 的 id 值。
  • 如果 Bean 实现了 BeanClassLoaderAware 接口,则 Spring 调用 setBeanClassLoader() 方法传入classLoader的引用。
  • 如果 Bean 实现了 BeanFactoryAware 接口,则 Spring 调用 setBeanFactory() 方法传入当前工厂实例的引用。
  • 还有其他一些诸如 EnvironmentAware ,EmbeddedValueResolverAware等接口
容器缓存阶段

这个阶段主要是将bean保存在IOC容器中缓存起来,到了这个阶段,bean就可以去被开发者使用了,那么这个阶段涉及到的操作有,常见的init-method属性配置的方法会在这个阶段被调用,比如说BeanPostProcessors类的后置处理方法,如postProcessAfterInitialization.

销毁实例阶段

这个阶段是完成spring应用上下文的时候,将去销毁spring上下文中所有bean,如果bean实现了DisposableBean接口的话,或者配置了destory-method属性的方法都将在这个阶段被调用.

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/839514.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号