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,会调用其前置处理postProcessBeforeInitialization,主要是对bean进行一些扩展,如SpringAOP;再比如InitializingBean,这个类里面有一个afterPropertiesSet方法,它给属性去赋值.
其次还会调用一些xxxAware接口:

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

容器缓存阶段

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

销毁实例阶段

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

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值