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 -手动调用

相关推荐
Dwzun13 分钟前
基于SpringBoot3+Vue3的油莎豆种植管理系统
java·前端·vue.js·spring boot·后端·python·计算机网络
小码哥_常6 小时前
一套自己部署的 IM,客户端是同一份 Flutter
前端·后端
蜗牛攻城狮8 小时前
微前端四大方案选型对比与最佳实践:qiankun、micro-app、wujie、Module Federation
前端·微前端·qiankun·前端架构·micro-app·wujie
学长毕设9 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
C^h9 小时前
c++ string
开发语言·c++
raindayinrain9 小时前
c++高性能--原子操作,无锁编程,操作顺序
开发语言·c++·性能优化
学逆向的9 小时前
C++ 合并命名空间
开发语言·c++·网络安全
Zhao-Jichao9 小时前
VS2026 打包 C++ 程序生成 EXE,借助 Installer Project 扩展工具
开发语言·c++
她说可以呀10 小时前
Vue插槽
前端·javascript·vue.js
qq_4480111610 小时前
Vue + Jinja2两套模版与法冲突造成undefinedError
前端·javascript·vue.js