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

相关推荐
小王师傅66几秒前
【Java结构化梳理】泛型-初步了解-下
java·开发语言
一叶飘零晋5 分钟前
【(一)Electron 使用之如何用vite+vue3搭建初始框架】
前端·javascript·electron
逝水如流年轻往返染尘9 分钟前
JAVA中的String类
java
一只叫煤球的猫11 分钟前
ThreadForge 1.2.0 发布:让 Java 并发代码更好写,这次补齐了高阶编排、示例与观测能力
java·设计模式·设计
光影少年16 分钟前
前端SSR和ssg区别
前端·vue.js·人工智能·学习·react.js
counting money17 分钟前
Spring框架基础(依赖注入-半注解形式)
java·后端·spring
CN-Dust17 分钟前
【C++】for循环例题专题
java·c++·算法
SmartRadio17 分钟前
ESP32-S3 双模式切换实现:兼顾手机_路由器连接与WiFi长距离通信 (采用Arduino代码框架)
开发语言·智能手机·esp32·长距离wifi
广州华水科技20 分钟前
北斗形变监测传感器在水库安全监测中的应用与发展
前端