spring bean的生命周期
spring bean的生命周期
一,流程图
Spring Bean的生命周期
实际上,Spring Bean的生命周期可以分为以下四个阶段:
-
实例化阶段(Instantiation):这个阶段,Spring容器根据Bean定义创建Bean的实例。
-
属性赋值阶段(Population):这个阶段,Spring容器将通过依赖注入或其他方式将属性值赋给Bean。
-
初始化阶段(Initialization):这个阶段,Spring容器会调用Bean的初始化方法,例如实现了InitializingBean接口的afterPropertiesSet()方法或自定义的init-method。
-
销毁阶段(Destruction):这个阶段,当Spring容器关闭时或手动销毁Bean时,会调用Bean的销毁方法,例如实现了DisposableBean接口的destroy()方法或自定义的destroy-method。
在这四个阶段中,Spring提供了多个扩展点(Extension Points)来影响Bean的生命周期:
-
BeanPostProcessor:这是一个接口,提供了在Bean实例化和初始化阶段前后进行处理的方法,可以对Bean进行自定义的前置处理和后置处理。
-
InstantiationAwareBeanPostProcessor:这是BeanPostProcessor接口的子接口,提供了在Bean实例化阶段的更细粒度的处理方法,例如可以在实例化Bean之前自定义Bean的实例化过程。
-
BeanFactoryPostProcessor:这是一个接口,用于在容器实例化Bean之前修改Bean定义或进行其他自定义操作。
这些扩展点可以影响多个Bean的生命周期,从而实现对Bean的统一处理。另外,还有一些扩展点可以影响单个Bean的生命周期,例如Bean的初始化方法和销毁方法,以及通过实现Aware接口来获取容器资源。
二,流程图描述的是Spring Bean的生命周期的详细阶段:
- Bean定义:这是Spring Bean生命周期的开始,你在Spring配置文件中定义一个Bean,或者通过注解定义一个Bean。
- Bean实例化:Spring容器开始实例化这个Bean。
- 依赖注入:根据你的配置,Spring容器注入Bean的依赖。
- 设置Bean名称:如果Bean实现了BeanNameAware接口,Spring容器会调用它的setBeanName方法,设置Bean的名称。
- BeanFactoryAware:如果Bean实现了BeanFactoryAware接口,Spring容器会调用它的setBeanFactory方法,传入BeanFactory的实例。
- ApplicationContextAware:如果Bean实现了ApplicationContextAware接口,Spring容器会调用它的setApplicationContext方法,传入ApplicationContext的实例。
- BeanPostProcessor前置处理:Spring容器运行所有注册的BeanPostProcessor的postProcessBeforeInitialization方法。
- InitializingBean.afterPropertiesSet:如果Bean实现了InitializingBean接口,Spring容器会调用它的afterPropertiesSet方法。
- 自定义init-method:如果Bean在配置文件中定义了init-method,Spring容器会调用这个方法。
- BeanPostProcessor后置处理:Spring容器运行所有注册的BeanPostProcessor的postProcessAfterInitialization方法。
- Bean准备就绪:现在Bean已经准备就绪,可以被应用程序使用了。
- 应用程序运行:应用程序正在运行,Bean正在被使用。
- DisposableBean.destroy:如果应用程序结束,或者Spring容器关闭,且Bean实现了DisposableBean接口,Spring容器会调用它的destroy方法。
- 自定义destroy-method:如果Bean在配置文件中定义了destroy-method,Spring容器会调用这个方法。
- Bean销毁:现在Bean已经被销毁。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!