欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > Spring启动过程及生命周期

Spring启动过程及生命周期

2025/2/25 13:23:21 来源:https://blog.csdn.net/loushaoqi/article/details/144892756  浏览:    关键词:Spring启动过程及生命周期

目录

启动过程

生命周期


启动过程

 

在Spring启动的时候调用init()法,然后初始化ioc容器,扫描配置获取相关的包,进行对象实例化,将实例化的对象进行属性注入。存入容器中。

Spring启动的时候,调用init方法获取配置文件的名称,获取要扫描的包的名称以及类的全名称。通过反射获取class文件的全名称放入list中

将获取到的对象封装成BeanDefinition.(类的简单名称,累的全名称) ,如果该类没有接口,那么BeanDefinition就是简单名称和全名称的组合,如果你有接口,还要 生成一个新的BeanDefinition,他的key为接口的全名称,值为实现类的全名称

然后把list转换成map

调用getBean循环map 如果有对象,那么这个方法就是获取方法,如果没有对象,这个方法就是一个创建方法

把实例化的对象放到三级缓存中,进行属性的注入,再放到容器当中(一级缓存)。

生命周期

 

生命周期是对一个Bean从创建到销毁的过程,但是如果我想在这个过程中对一些bean做改变,我可以实现

一些接口,然后在这些接口中去对bean做改变,spring中提供了系列的接口和注解介入了bean的生命周期。

首先一个bean的创建过程是这样的:

实例化 创建实例阶段主要是通过反射创建bean的实例对象

属性注入 如果被实例化的bean存在依赖其他bean对象的一些情况则需要对这些依赖的bean进行对象注入比如Autowired以及setter注入等这样一些配置形式

初始化

包含了以下几个步骤:

1)实现了BeanFactoryAware接口,会先调用setBeanFactory方法

2)实现了BeanNameAware接口,会先调用setBeanName方法

3)实现了BeanPostProcessor接口,会先调用postProcessBeforeInitialization方法

4)实现了InitializingBean接口,会调用afterPropertiesSet方法

5) init-method方法调用

6)然后在进行aop后置处理,通过实现BeanPostProcessor接口,在postProcessAfterInitialization方法中进

行动态代理

销毁

当spring应用上下文被关闭的时候那么这个上下文中所有的bean会被销毁

对加了@PreDestroy注解的方法进行调用

实现了DisposableBean接口的destroy方法

配置destroy-method方法被执行

  1. Spring 对bean 进行实例化。
  2. Spring 将值和bean的引用注入到bean对应的属性中。
  3. 如果bean实现了BeanNameAware接口,Spring将bean的ID传递给setBean-Name() 方法。
  4. 如果bean 实现了BeanFactoryAware接口,Spring将调用setBeanFactory() 方法,将BeanFactory容器实例传入。
  5. 如果bean实现了ApplicationContextAware接口,Spring将调用setApplicationContext() 方法,将bean所在的应用上下文的引用传入进来。
  6. 如果bean实现了BeanPostProcessor接口,Spring将调用它们的post-ProcessBeforeInitialization() 方法
  7. 如果bean实现了InitializingBean接口,Spring将调用它们的after-PropertiesSet()方法。类似的,如果bean使用init-method声明了初始化方法,该方法也会被调用。
  8. 如果bean实现了BeanPostProcessor接口,Spring将调用它们的post-ProcessAfterInitialization() 方法。
  9. 此时, bean 已经准备就绪,可以被应用程序使用了,它们将一直驻留在应用上下文中,直到该应用上下文被销毁。
  10. 如果bean实现了DisposableBean接口,Spring将调用它的destory()接口方法。同样,如果bean使用destroy-method声明了销毁方法,该方法也会被调用。

创建前准备回去配置中获取bean有关 的扩展实现比如init-method容器在初始化的时候回调用的一些方法,destroy method容器在销毁bean的时候回调用的一些方法以及beanFactoryPostProcessor 这一类的bean加载过程中的一些前置和后置的一些处理扩展实现,这些类或配置其实是spring提供给开发者用来去实现bean加载过程中的一些扩展,在很多的和spring集成的中间件也比较常见 ,比如像dubbo

创建实例阶段主要是通过反射区创建bean的实例对象,并且会扫描和解析bean声明的一些属性

依赖注入

如果被实例化的bean存在依赖其他bean对象的一些情况则需要对这些依赖的bean进行对象注入比如Autowired以及setter注入等这样一些配置形式,还会有一些扩展的调用,比如beanPostProcessors用来去实现bean初始化前后的一些回调,以及向beanfactoryaware等

容器缓存阶段

主要作用是吧bean保存到容器以及spring的缓存中,这个阶段可以被使用了,这个阶段的操作常见的像init-method,这个属性配置的方法,会在这个阶段会被调用。以及向BeanPostProcessors的后置处理器方法也会在这个阶段被触发

销毁实例阶段,当spring应用上下文被关闭的时候那么这个上下文中所有的bean会被销毁,实现了像DisposableBean接口或者配置了destory-method属性的一些方法会在这个阶段会被调用

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词