Spring spring

Spring中文网站 > Spring Framework > Spring中Bean的作用域有哪些 Spring Bean的生命周期
Spring中Bean的作用域有哪些 Spring Bean的生命周期
发布时间:2026/03/23 13:57:44

品牌型号:联想ThinkPad X1

系统:Windows10家庭版

软件版本:Spring 5.3.7

使用Spring框架做开发的时候,无论是用于学习的小项目还是负责的分布式应用,每天都会跟Bean打交道,很多Java程序员在工作的时候,往往只关心Bean的定义、使用,但是却忽略了Bean的作用域和生命周期。有时候我们会发现同样都是注入了一个Bean,但是有的地方拿到的是同一个实例,有的地方获取到的Bean却是一个新的,还有的时候Bean里面的初始化方法的执行时机不对,导致依赖注入失败。说白了还是对这两个知识点的掌握不够深,如果能搞懂这两个知识点,可以帮我们少走些弯路,对我们进阶Spring很有作用。下面就给大家介绍Spring中Bean的作用域有哪些,Spring Bean的生命周期的相关内容。

一、Spring中Bean的作用域有哪些

Spring中Bean的作用域核心的有两种:singleton(单例)和prototype(原型)。其中singleton是默认作用域,我们在创建Bean的时候,Spring容器中Bean只存在一个实例,不管是获取多少次,拿到的都是同一个对象,而且这种Bean在初始化的时候就创建,容器关闭的时候会跟着销毁。

singleton是Spring的默认作用域
图1:singleton是Spring的默认作用域

我们有时候会需要每次获取Bean的时候创建一个新的实例,例如实体类,可以找到配置文件或者通过注解修改Scope属性为prototype,那么每次获取Bean的时候都会得到一个新的实例,要注意的是没有缓存,容器只负责创建但是不负责销毁。

修改Spring的作用域为prototype原型
图2:修改Spring的作用域为prototype原型

在Spring Web中,Bean的作用域还有请求作用域,每个HTTP请求对应了一个Bean实例,请求结束后,Bean就会销毁。但是这个作用域仅限用于Web环境,例如处理单个请求的Bean的时候。既然有请求作用域,那么肯定会有会话作用域,对应的是,每一个HTTP Session对应了一个Bean实例。而Application应用作用域是整个Web应用中只存在一个Bean实例。

二、Spring Bean的生命周期

Spring中Bean的生命周期,就是Bean从被创建、初始化一直到业务逻辑完成后被销毁的过程,这些Bean的生命周期都是由Spring容器来全程管理,每个阶段都有明确的触发时机和执行逻辑。在项目启动的时候 Spring容器会根据配置通过构造方法创建Bean的实例,这时候Bean还没完成依赖注入,相当于还处于空壳状态。

通过构造方法实例化Bean
图3:通过构造方法实例化Bean

每个Bean都实例化之后,才到了依赖注入阶段,会把Bean依赖的其他Bean或者属性通过setter、构造等方法注入到当前Bean中,而且,一定是在实例化之后,不然会出现空指针异常。

通过Setter方法完成依赖注入
图4:通过Setter方法完成依赖注入

Bean实例化并且完成了依赖注入后,就到了初始化阶段了,这个阶段会执行我们自定义的逻辑,例如在配置中执行的init-method方法,初始化完成后,Bean到了可以被程序正常调用、使用的状态,会一直存在Spring容器中,一直到容器关闭。如果手动调用容器的关闭方法,会触发destroy方法。

以上就是Spring中Bean的作用域有哪些,Spring Bean的生命周期的全部内容了。Spring Bean的作用域有5个,其中两个作用域主要是控制每次从Spring中获取的Bean是单例还是多例。另外三个是Spring Web专属的作用域,可以让每个HTTP请求都对应一个Bean实例、每个Session都对应一个Bean实例,甚至每个Web应用程序只存在一个Bean实例。Bean在创建的时候,会先加载配置,然后对Bean进行实例化,实例化完成后才去进行依赖注入,注入完成后到就绪状态才可以正式被使用,当容器关闭或者销毁的时候,会执行自定义的销毁逻辑避免资源泄露。

180 1563 6924