Spring spring

Spring中文网站 > Spring Security > Spring快速入门 Spring容器加载过程
Spring快速入门 Spring容器加载过程
发布时间:2026/03/09 10:37:13

品牌型号:联想ThinkPad X1

系统:Windows10家庭版

软件版本:Spring 5.3.7

很多接触Spring框架的Java开发者一开始只会在Spring中进行一些简单的配置和使用Bean,但是很少去深入了解背后的核心逻辑,每次启动Spring容器后,不知道Spring容器是如何启动、如何加载配置和管理Bean。如果能弄清楚Spring容器的加载过程,那么对整个Spring框架会有个基础的理解,是从会用到懂原理的关键一步。很多人刚学Spring时,只关注怎么通过Xml或者注解配置Bean,忽略了容器加载的底层流程,导致容易碰到配置报错、Bean无法注入等问题。下面就给大家介绍一下Spring快速入门,Spring容器加载过程的相关内容。

一、Spring快速入门

我们启动IDEA并创建一个Maven项目,在项目pom.xml中添加Spring相关的依赖。

添加Spring依赖
图1:添加Spring依赖

构建Service层代码和Dao层代码,可以在Service层中创建一个UserService接口和它的实现类UserServiceImpl。

创建UserService接口及其实现类UserServiceImpl
图2:创建UserService接口及其实现类UserServiceImpl

Spring的核心思想是IOC控制反转,将创建对象的权力交给了Spring容器,我们可以在maven项目结构中的Resources文件夹中添加一个名为applicationContext.xml的配置文件,并正确添加 XML声明和Spring Schema配置,在XML中我们使用bean标签完成bean的配置。

Spring的applicationContext.xml配置文件
图3:Spring的applicationContext.xml配置文件

接着我们可以创建一个Spring容器对象ClassPathXmlApplicationContext加载applicationContext.xml配置文件,通过ClassPathXmlApplicationContext对象的getBean方法获取配置文件中的bean。

创建Spring容器加载并获取bean
图4:创建Spring容器加载并获取bean

二、Spring容器加载过程

现在我们应该已经知道怎么构建一个最简单的Spring项目了,在前面我们启动Spring项目的时候,使用了ClassPathXmlApplicationContext这个类,我们追溯发现这个类其实是ApplicationContext这个接口的实现类,而ApplicationContext又是BeanFactory的子接口,在BeanFactory接口上做了一些扩展。

ClassPathXmlApplicationContext继承结构图
图5:ClassPathXmlApplicationContext继承结构图

我们在使用ClassPathXmlApplicationContext创建Spring容器的时候,传入了applicationContext.xml配置文件,会去加载配置文件,再解析这个Xml配置文件中的bean标签或者注解,简单理解是在做启动准备。解析完之后会将Bean的元信息封装成Spring可以识别的BeanDefinition对象并注册到BeanDefinitionRegistry中。

将配置转化成Spring可以识别的BeanDefinition对象
图6:将配置转化成Spring可以识别的BeanDefinition对象

容器刷新的时候,会通过反射调用非懒加载的Bean的构造方法进行实例化,接着会把实例化的单例Bean存入DefaultSingletonBeanRegistry的singletonObjectsMap中,方便后面直接获取,再把容器中已经初始化的Bean注入到当前Bean的属性中完成依赖注入。如果代码里使用Spring容器的close方法手动释放容器的话,会发布ContextClosedEvent事件,执行Bean中配置的销毁方法,然后释放容器清空单例池。

手动释放容器
图7:手动释放容器

以上就是Spring快速入门,Spring容器加载过程的全部内容了。我们要快速创建一个Spring项目,只需要在maven的pom配置中添加 Spring的核心依赖,然后在Resources中添加applicationContext.xml并给类配置bean,最后启动Spring容器加载配置文件并获取bean就可以了。容器启动后,会先做预热,将配置文件加载,解析配置文件后,将Bean元信息注册到BeanDefinitionRegistry,再通过反射实例化非懒加载Bean,再将实例化的Bean存放到单例池中方便后面直接获取,最后手动关闭容器的时候,会发布关闭事件并执行销毁方法。

读者也访问过这里:
180 1563 6924