Spring spring

Spring中文网站 > Spring Integration > Spring IOC是什么 Spring容器启动过程
Spring IOC是什么 Spring容器启动过程
发布时间:2026/03/09 10:34:33

品牌型号:联想ThinkPad X1

系统:Windows10家庭版

软件版本:Spring 5.3.7

Java程序员在开发的时候,经常会用到Spring框架,Spring已经成为了我们技术选型时不可或缺的工具,你是新手小白也好、技术大神也罢,在日常接口开发或者负责系统搭建的时候,使用Spring框架搭建一定会感受到它带来的便捷,学好Spring是很重要的,很多程序员对Spring的认知往往只停留在了注解调用、配置文件编写的层面,但是说到核心原理却一知半解,”SpringIOC是什么”、“Spring容器启动过程”是面试时经常被问到的,为了让大家对Spring框架有更深刻的理解,那么接下来我们就从这两个问题出发,帮助大家加深对Spring的理解。

一、Spring IOC是什么

Spring IOC是一种思想,说起Spring IOC我们就不得不提出早期Java Web开发遇到的痛点了,我们在写Controller、Service、Dao三层代码时,会发现层与层之间高度耦合,而且接口和其实现类也紧密耦合在一起。

早期业务痛点
图1:早期业务痛点

在实际开发的时候,如果对象之间高度耦合,一处改动就会影响多处,牵一发而动全身,大大增加了维护成本,就更不要说扩展了,稍有不慎,某一个小小的改动会导致整个系统崩溃甚至跑不起来。

项目代码高度耦合带来的影响
图2:项目代码高度耦合带来的影响

这时候Spring带着它的IOC控制反转思想来了,IOC思想强调的是将原来在程序里创建Bean对象的权力,交给第三方工厂来管理。例如原来在程序中需要手动new的对象,交给Spring容器,这样程序中的对象之间就解除了直接关联。Spring容器统一管理bean的生成,开发者不再关注对象如何创建、如何关联,只需要专注于业务逻辑本身。

Spring IOC的具体实现
图3:Spring IOC的具体实现

二、Spring容器启动过程

上文我们有提到过Spring容器,它算是IOC思想的载体,将Bean交给Spring管理之后,Spring容器会负责对象的创建、依赖注入还有生命周期的管理。Spring容器主要分为两种,一个是BeanFactory一个是ApplicationContext,Application是BeanFactory的子类,功能相对来说更完善些,平时我们写的 ClassPathXmlApplicationContext、AnnotationConfigApplicationContext都是ApplicationContext的实现类,所以启动过程基本上是一样的。

ApplicationContext继承体系
图4:ApplicationContext继承体系

为了方便一些初学者,我们这里就以ClassPathXmlApplicationContext来说,在new ClassPathXmlApplicationContext创建容器对象的时候,Spring会先初始化容器的核心组件,再加载Resource下的配置文件applicationContext.xml,容器会解析这个配置文件中的bean标签,根据bean去提取每个Bean的类路径、依赖关系、作用域等信息形成一个Bean定义注册表,这时候Bean其实还没有被创建。

容器创建时会解析配置文件中的bean、类路径、依赖关系等信息
图5:容器创建时会解析配置文件中的bean、类路径、依赖关系等信息

下面就开始正式给Bean实例化、依赖注入,如果bean配置了lazy-init属性为true,那么暂时不会被实例化,当所有非懒加载的单例Bean都实例化成功并且依赖注入这个动作也都完成了,容器就会去执行一些后置处理操作,例如我们在bean中配置的初始方法,待所有Bean初始化完成后,Spring容器才算是启动完成了。

在Bean中配置懒加载
图6:在Bean中配置懒加载

以上就是Spring IOC是什么,Spring容器启动过程的全部内容了。Spring IOC是一种思想,将原本通过硬编码创建Bean的权力交给了Spring容器,降低项目代码的耦合度、简化开发并且减少维护成本。Spring容器会统一负责管理bean的创建, Spring容器在创建实例的时候,会加载配置文件并读取里面的配置,将bean的信息暂存起来,再依次创建非懒加载的单例Bean并识别、注入依赖,最后执行后置处理操作,等这些操作完之后,Spring容器正式启动完成。

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