news 2026/4/22 17:58:16

【Spring 原理】Bean 的作用域与生命周期

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Spring 原理】Bean 的作用域与生命周期

文章目录

    • 一、Bean的作用域
      • 1.1 概念
      • 1.2 Bean的作用域
    • 二、Bean的生命周期
      • 2.1 概念
      • 2.1 代码演示

一、Bean的作用域

1.1 概念

在Spring IoC&DI,Spring 是通过以下方式管理对象的。

  1. 通过@Controller , @Service , @Repository , @Component , @Configuration , @Bean 来声明Bean对象。
  2. 通过 ApplicationContext 或者 BeanFactory 来获取对象
  3. 通过@Autowired , Setter 方法或者构造方法等来为应用程序注入所依赖的Bean对象。

  1. 通过@Bean 声明bean , 把bean存在Spring容器中
@ComponentpublicclassDogBeanConfig{@BeanpublicDogdog(){Dogdog=newDog();dog.setName("旺旺");returndog;}}
  1. 从Spring容器中获取Bean
@SpringBootApplicationpublicclassSpringIocApplication{publicstaticvoidmain(String[]args){//获取Spring上下文对象ApplicationContextcontext=SpringApplication.run(SpringIocApplication.class,args);//从Spring上下文中获取对象Dogdog=context.getBean(Dog.class);System.out.println(dog);}}

也可以通过在代码中直接注入ApplicationContext的方式来获取Spring容器

@SpringBootTestclassDemoApplicationTests{@AutowiredprivateApplicationContextapplicationContext;//Spring 容器@TestvoidcontextLoads(){DogBeandog1=applicationContext.getBean(DogBean.class);System.out.println(dog1);}}

观察运行结果:
发现输出的bean对象地址值是一样的,说明每次从Spring容器中取出来的对象都是同一个。这也是"单例模式"

单例模式:确保一个类只有一个实例,多次创建也不会创建出多个实例。

默认情况下,Spring容器中的bean都是单例的,这种行为模式,我们就称之为Bean的作用域。
Bean 的作用域是指 Bean 在 Spring 框架中的某种行为模式。

1.2 Bean的作用域

在Spring中支持6种作用域,后4种在Spring MVC环境才生效

  1. singleton:单例作用域
  2. prototype:原型作用域(多例作用域)
  3. request:请求作用域
  4. session:会话作用域
  5. Application: 全局作用域
  6. websocket:HTTP WebSocket 作用域
作用域说明
singleton每个Spring IoC容器内同名称的bean只有一个实例(单例)(默认)
prototype每次使用该bean时会创建新的实例(非单例)
request每个HTTP 请求生命周期内, 创建新的实例(web环境中, 了解)
session每个HTTP Session生命周期内, 创建新的实例(web环境中, 了解)
application每个ServletContext生命周期内, 创建新的实例(web环境中, 了解)
websocket每个WebSocket生命周期内, 创建新的实例(web环境中, 了解)

二、Bean的生命周期

2.1 概念

生命周期指的是一个对象从诞生到销毁的整个生命过程,我们把这个过程就叫做一个对象的生命周期。 Bean 的生命周期分为以下5个部分:

  1. 实例化(为Bean分配内存空间)
  2. 属性赋值(Bean注入和装配,比如@AutoWired )
  3. 初始化
    a. 执行各种通知,如 BeanNameAware , BeanFactoryAware ,ApplicationContextAware 的接口方法。
    b. 执行初始化方法
    ▪ xml定义init-method
    ▪ 使用注解的方式 @PostConstruct
    ▪ 执行初始化后置方法( BeanPostProcessor )
  4. 使用Bean
  5. 销毁Bean
    a. 销毁容器的各种方法,如 @PreDestroy , DisposableBean 接口方法,destroymethod。

实例化和属性赋值对应构造方法和setter方法的注入。 初始化和销毁是用户能自定义扩展的两个阶段,可以在实例化之后,类加载完成之前进行自定义"事件"处理。

执行流程如下图所示:

2.1 代码演示

@ComponentpublicclassBeanLifeComponentimplementsBeanNameAware{privateUserComponentuserComponent;publicBeanLifeComponent(){System.out.println("执行构造函数");}@AutowiredpublicvoidsetUserComponent(UserComponentuserComponent){System.out.println("设置属性userComponent");this.userComponent=userComponent;}@OverridepublicvoidsetBeanName(Strings){System.out.println("执行了 setBeanName 方法:"+s);}@PostConstructpublicvoidpostConstruct(){System.out.println("执行 PostConstruct()");}publicvoiduse(){System.out.println("执行了use方法");}@PreDestroypublicvoidpreDestroy(){System.out.println("执行:preDestroy()");}}

通过运行结果观察

  1. 先执行构造函数
  2. 设置属性
  3. Bean初始化
  4. 使用Bean
  5. 销毁Bean
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 14:44:36

小程序毕设项目:基于springboot+Android的养宠交流系统的设计与开发(源码+文档,讲解、调试运行,定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/4/18 12:34:36

【课程设计/毕业设计】基于Python与Django的校园在线考试系统设计与实现基于Python+django的在线考试系统设计和实现【附源码、数据库、万字文档】

java毕业设计-基于springboot的(源码LW部署文档全bao远程调试代码讲解等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、…

作者头像 李华
网站建设 2026/4/15 18:57:25

10款Bug管理系统盘点:流程定制、通知降噪、报表复盘全解析

本文将深入对比2026年10款Bug跟踪管理系统:PingCode、Jira Software、Azure DevOps、GitLab Issues、YouTrack、Linear、Bugzilla、MantisBT、Worktile、TAPD。一、选型先定标准:流程跑得顺、通知不扰民、统计能复盘1、流程怎么判断“好不好用”&#xf…

作者头像 李华
网站建设 2026/4/18 11:10:44

【收藏必学】Java大模型后端开发实战:RAG应用架构与实现详解

在大模型技术从“实验室”走向“产业级应用”的过程中,工程化落地能力成为核心竞争力。后端服务作为大模型应用的“骨架”,承担着请求调度、数据处理、逻辑编排等关键职责,而Java凭借其稳定性、高并发处理能力和丰富的生态体系,成…

作者头像 李华
网站建设 2026/3/24 9:49:28

CANN异构计算架构赋能AIGC:从模型推理到内容解析实战

AIGC的快速发展对异构算力、高效模型推理、多模态内容解析提出了极高要求,大模型训练推理、文生图/图生文、实时内容生成等场景,需要兼顾算力的高效利用与全链路的解析适配。CANN作为面向AI的异构计算架构,凭借低依赖的轻量化推理能力、灵活的…

作者头像 李华