SpringBean生命周期流程图
2022-04-14 22:24:51 11 举报
Springbean的生命周期,大致可以分为五个阶段,分别是创建前准备、创建实例化、依赖注入、容器缓存和销毁实例这样一个阶段。 第一个阶段,创建前准备这个阶段的主要作用,是bean在开始加载之前,要从上下文和一些配置中去解析并且查找bean有关的一些获得的事件。 比如说像init-method,容器在初始化bean的时候会调用的一些方法,destroy-method容器在销毁bean的时候会调用的一些方法, 以及beanfactoryPostprocessor这一类的bean加载过程中一些前置后置的一些处理扩展实现,这些类或者配置其实是spring提供给开发者用的去 实现bean加载过程中的一些扩展。在很多的和spring集成中间件也比较常见,比如说像dobbo这样一些中间件。 第二个阶段是创建实例阶段,这个阶段,主要作用是通过反射去创建bean的实例对象,并且会扫描和解析bean声明的一些属性。 第三个阶段是依赖注入阶段,如果被实例化的bean存在依赖其他bean对一些情况则需要对这些依赖的bean进行对象注入, 比如常见的@AutoWired以及setter注入等这样的一些配置形式,同时,在这个阶段,会触发一些扩展的调用, 比如说常见的扩展类beanPostProcessors,用来去实现bean初始化前后的扩展回调,以及像beanfactoryaware等等。 第四个阶段是容器缓存阶段,容器缓存阶段主要的作用是把bean保存到容器以及spring的缓存中,到这个阶段的bean就可以被开发者去使用。 这个阶段涉及到一些操作,常见的像init-method这个属性配置一些方法或者这个阶段会被调用,以及像beanpostprocessor的后置处理一些方 法也会在这个阶段被触发。 第五个阶段是销毁时阶段,当spring的应用上下文被关闭的时候,那么这个上下文中所有的bean会被销毁。如果存在bean实现了像disposablebean 接口或者配置destroy-method属性的一些方法会在这个阶段会被调用。
作者其他创作
大纲/内容
在目标bean被实例化之前先执行此处理器的逻辑
实例化InstantiationAwareBeanPostProcessor的postProcessPropertyValues()方法
调用bean的init-method方法(在配置中属性指定的方法)
实例化BeanFactoryPostProcessor(BeanFactory后置处理器)
容器初始化成功
销毁实例阶段
我们自己写的业务逻辑,在此后可以正常执行
容器缓存阶段
为bean注入属性
创建前准备阶段
实例化BeanPostProcessor(BeanFactory后置处理器)
依赖注入阶段
实例化InstantiationAwareBeanPostProcessor的postProcessBeforeInstantiation()方法(在实例化之前的后置处理)
正式创建bean
执行bean的构造器
实例化BeanPostProcessor实现类
实例化InstantiationAwareBeanPostProcessor的postProcessAfterInstantiation()方法(初始化感知后置处理器在实例化之后执行)
执行beanPostProcessor的postProcessBeforeInitialization()方法(后置处理器再实例化之前的方法)
调用beanFactoryAware的setBeanFactory()方法
调用beanNameAware的setBeanName()方法
设置好所有的bean属性之后,由BeanFactory调用
创建实例阶段
执行正常调用后,后面就是销毁Bean的逻辑
调用InitializationBean的afterPropertieSet()方法
BeanFactoryPostProcessor会比bean先实例化
先设置bean的name在设置创建bean的factory
执行BeanPostProcessor的postProcessAfterInitialization()方法(bean后置处理器在实例化之后执行)
调用Bean的destory-method方法(在配置中属性指定的方法)
所有的初始化动作(如afterPropertieSet,init-method)回调之前,都将把beanPostProcessor赋值给新创建的Bean
调用DiposibleBean的destory()方法
实例化InstantiationAwareBeanPostProcessorAdapter实现类(实例化感知的bean后置处理器)
被BeanFactory调用最终销毁单例对象

收藏
0 条评论
下一页