Spring Bean的生命周期

这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战

Spring作为当前Java最流行、最强大的轻量级框架,受到了程序员的热烈欢迎。因此在面试中也常常问及该框架的相关问题。本文将讲解常见面试题【Spring Bean的生命周期】。我们通常使用ApplicationContext作为Spring容器。这里,我们讲的也是 ApplicationContext中Bean的生命周期。而实际上BeanFactory也是差不多的,只不过处理器需要手动注册。

image.png

image.png

  1. Bean 容器找到配置⽂件中 Spring Bean 的定义。
  2. Bean 容器利⽤ Java Reflection API 创建⼀个Bean的实例。
  3. 如果涉及到⼀些属性值 利⽤ set() ⽅法设置⼀些属性值。
  4. 如果 Bean 实现了 BeanNameAware 接⼝,调⽤setBeanName() ⽅法,传⼊Bean的名字。
  5. 如果 Bean 实现了 BeanClassLoaderAware 接⼝,调⽤ setBeanClassLoader() ⽅法,传⼊ClassLoader 对象的实例。
  6. 与上⾯的类似,如果实现了其他 *.Aware 接⼝,就调⽤相应的⽅法。
  7. 如果有和加载这个 Bean 的 Spring 容器相关的 BeanPostProcessor 对象,执⾏ postProcessBeforeInitialization() ⽅法
  8. 如果Bean实现了 InitializingBean 接口,执行 afterPropertiesSet() ⽅法。
  9. 如果 Bean 在配置⽂件中的定义包含 init-method 属性,执⾏指定的⽅法。
  10. 如果有和加载这个 Bean的 Spring 容器相关的 BeanPostProcessor 对象,执⾏ postProcessAfterInitialization() ⽅法
  11. 当要销毁 Bean 的时候,如果 Bean 实现了 DisposableBean 接⼝,执⾏ destroy() ⽅法。
  12. 当要销毁 Bean 的时候,如果 Bean 在配置⽂件中的定义包含 destroy-method 属性,执⾏指定的⽅法。

简单概括:

  1. 实例化:配置⽂件找定义,利用反射建实例。
  2. 属性赋值:有值则用set()设置,再看有无Awar,如有则调相关set()。
  3. 初始化
    如果有以下配置,则将执行对应method。
    若载BeanPostProcessor(),执⾏ postProcessBeforeInitialization() 。
    如有实现InitializingBean ,行 afterPropertiesSet()
    配置⽂件有定义,相关 init-method 属性的,则将执⾏指定⽅法。
    如有加载BeanPostProcessor 对象,执⾏ postProcessAfterInitialization() ⽅法

————这里就可以使用这个bean了————

  1. 销毁
    如果实现DisposableBean 接⼝,执⾏ destroy() ⽅法。
    配置⽂件有定义,相关 destroy-method 属性的,执⾏指定的⽅法。

图片来源: www.cnblogs.com/zrtqsk/p/37…

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%