Spring Bean作用域与生命周期全解析

一.Bean的作用域

在SpringIoC中类注解(@Component,@Controller,@Servie,@Repository,@Configuration)

方法注解(@Bean)都是用来声明Bean对象

通过@Autowired , 构造方法,Setter方法来获取注入Spring并由Spring管理的Bean对象

通过 ApplicationContext 或者 BeanFactory 来获取对象

默认情况下, Spring容器中的bean是单例的

作用域 描述 特点 适用场景
singleton 单例作用域 每个 Spring 容器只创建一个共享实例(默认) 所有请求返回同一个实例;容器管理生命周期 无状态服务类、DAO、控制器
prototype 原型作用域 每次请求(注入或 getBean)都创建新实例 容器只负责创建和组装依赖,不管理销毁 有状态的 Bean、临时 Helper 类
request 请求作用域 每个 HTTP 请求创建一个新实例(仅 Web 应用) 实例在当前请求内有效,请求结束销毁 请求上下文数据、表单对象
session 会话作用域 每个 HTTP Session 共享一个实例(仅 Web 应用) 实例在整个用户会话期间有效,会话结束销毁 购物车、用户登录信息
application 全局作用域 每个 ServletContext 生命周期创建一个实例 类似于单例,但作用域是整个 Web 应用上下文 跨多个 Servlet/Controller 的全局数据
websocket HTTPWebSocket 作用域 每个 WebSocket 会话创建一个实例(仅 Web 应用) 实例与 WebSocket 会话绑定,长连接期间有效 WebSocket 会话状态管理

可以通过@Scope来设置,

singleton和prototype是给@Scope里面传入ConfigurableBeanFactory然后调用方法

java 复制代码
String SCOPE_SINGLETON = "singleton";
String SCOPE_PROTOTYPE = "prototype";

request使用@RequestScope, session使用@SessionScope, application使用@ApplicationScope

二.Bean的生命周期

1.实例化

为Bean分配内存空间

2.属性赋值

Bean注入和装配, 如 @AutoWired

3.初始化

@PostConstruct

1.执行各种通知

2.执行初始化的前置方法

3.执行初始化方法

4.执行初始化的后置方法

4.使用Bean

5.销毁Bean

@PreDestroy-Spring 自动调用,@DisposableBean -手动调用

相关推荐
人工智能培训4 分钟前
大语言模型:从语言理解到通用智能的跃迁
linux·服务器·前端·人工智能
木井巳9 分钟前
【记忆化搜索】最长递增子序列
java·算法·leetcode·深度优先·剪枝·推荐算法
一拳不是超人14 分钟前
做独立开发三个月,我的第一个产品终于有了 1000 个用户
前端·程序员
杨杨杨大侠16 分钟前
知识库已经有了,Java 程序员还要做什么?Spring AI RAG 实战
java·openai·ai编程
伊信21 分钟前
Spring AI 基础学习与应用
java·后端
Amos_Web24 分钟前
Rspack 源码解析(十):Hash 与 Asset 生成
前端·rust·源码阅读
福兮说26 分钟前
用 IndexedDB 存用户的文件,我踩过的五个坑
前端·javascript
闪耀之光M7827 分钟前
前端依赖自动导入:unplugin-auto-import
前端
夜郎king28 分钟前
基于 Java + Playwright 实现网站自动访问与数据采集(以腾讯云开发者社区为例)
java·playwright·网页数据获取
Anastasiozzzz32 分钟前
重新定义 Agent 基建:Redis 在现代 AI 与智能体系统中的工程实践
java·人工智能·redis·ai