Springboot 的Bean生命周期五步、七步、十步详解以及框架源码解读生命周期-面试热点-xunznux
Spring Boot中的Bean生命周期通常可以概括为以下几个步骤:
- 实例化(Instantiation):Spring容器通过反射或者工厂方法来创建Bean的实例。
- 属性赋值(Populate Properties):为Bean的属性设置值和对其他Bean的引用。
- 初始化(Initialization):如果Bean实现了BeanNameAware, BeanFactoryAware, ApplicationContextAware等接口,会调用对应的方法。然后,如果BeanPostProcessor被注册,相应的postProcessBeforeInitialization()方法会被调用。最后,如果Bean实现了InitializingBean接口,其afterPropertiesSet()方法会被调用;或者,如果Bean使用了init-method属性指定了初始化方法,这个方法也会被调用。
- 使用(In Use):Bean现在可以被应用程序使用了。
- 销毁(Destruction):当容器关闭时,如果Bean实现了DisposableBean接口,其destroy()方法会被调用;或者,如果Bean使用了destroy-method属性指定了销毁方法,这个方法也会被调用。
以上是Bean的生命周期概述,具体实现细节依赖于Spring的版本和配置。
Spring框架中Bean的完整生命周期可能会涉及更多的步骤,包括:
- 检查是否存在该Bean的实例,如果存在则直接使用,否则创建新的实例。
- 如果Bean是原型(prototype)的,则在这一步骤结束时,Spring会返回Bean的实例,后续步骤不会执行。
- 如果Bean是单例(singleton)并且是第一次被访问,则会创建Bean的实例。
- 解析Bean的依赖关系,如果有依赖的话,则先解析依赖的Bean。
- 应用Bean的定制器(BeanPostProcessor),这是一个可以在Bean初始化前后对Bean进行修改的接口。
- 如果Bean实现了InitializingBean接口,则会调用afterPropertiesSet()方法。
- 如果在配置中通过init-method属性指定了初始化方法,则会调用这个方法。
- 当容器关闭时,如果Bean实现了DisposableBean接口,则会调用destroy()方法。
- 如果在配置中通过destroy-method属性指定了销毁方法,则会调用这个方法。
这些步骤在Spring框架的源码中可以详细地找到,例如在AbstractAutowireCapableBeanFactory类中的createBean方法中包含了实例化和属性赋值的步骤,而在AbstractApplicationContext类中的finishRefresh方法中包含了Bean的初始化和使用的步骤,以及在close方法中包含了Bean的销毁的步骤。
评论已关闭