Spring Bean的生命周期可以分为以下几步:
1.通过Spring框架的beanFactory工厂利用反射机制创建bean对象;
2.根据set方法或者有参构造方法给bean对象的属性进行依赖注入;
3.判断当前bean对象是否实现相关的aware接口,诸如beanNameAware、beanFactoryAware接口,如果有的话执行对应的方法;
4.执行bean对象的后置处理器postprocessbeforinitialztion
5.执行初始化方法initMethod
6.执行bean对象的后置处理器postprocessafterinitialztion
7.判断当前bean对象是否为单例,是则放到spring对象容器中,多例直接返回bean对象;
8.使用bean对象;
9.关闭容器,调用destroy方法销毁对象。
来自文心一言
1.创建Bean对象:
Spring容器通过BeanFactory或ApplicationContext利用反射机制创建Bean的实例。
2.依赖注入:
根据Bean定义中的属性设置或构造方法参数,Spring容器通过自动装配或显式配置,为Bean的属性注入依赖的其他Bean或值。
3.Aware接口回调:
如果Bean实现了BeanNameAware、BeanFactoryAware等Aware接口,Spring容器会在Bean初始化过程中调用相应的回调方法,将相关信息(如Bean的名称、BeanFactory等)传递给Bean。
4.前置处理器(Post-Processor)的postProcessBeforeInitialization方法:
如果在Spring配置中定义了Bean后置处理器(如BeanPostProcessor),那么在Bean的初始化方法执行前,会先调用这些后置处理器的postProcessBeforeInitialization方法。这允许在Bean的初始化阶段之前对Bean进行额外的处理或修改。
5.执行初始化方法:
如果Bean实现了InitializingBean接口,则会调用其afterPropertiesSet方法;或者,如果Bean定义中指定了init-method属性,则调用该指定的初始化方法。
6.后置处理器(Post-Processor)的postProcessAfterInitialization方法:
在Bean的初始化方法执行后,会再次调用Bean后置处理器的postProcessAfterInitialization方法。这允许在Bean的初始化阶段之后对Bean进行额外的处理或修改。
7.将Bean放入容器:
对于单例Bean,Spring容器会将其缓存起来,以便后续使用;对于原型Bean,每次请求时都会创建新的实例。
8.使用Bean:
应用程序可以通过Spring容器获取并使用这些Bean,进行业务逻辑的处理。
9.销毁Bean:
当Spring容器关闭时,会销毁所有的单例Bean。如果Bean实现了DisposableBean接口,则会调用其destroy方法;或者,如果Bean定义中指定了destroy-method属性,则调用该指定的销毁方法。这允许Bean在销毁前执行必要的清理操作。
通过这个过程,Spring容器确保了Bean的完整生命周期管理,从创建到初始化,再到使用,最后销毁,都受到了Spring容器的精确控制。这使得Spring应用能够更加灵活、高效地管理Bean的生命周期。