当前位置: 首页 > news >正文

spring bean一共有几种作用域

系列文章目录

文章目录

  • 系列文章目录
  • 一、spring bean作用域
    • 1、singleton
    • 2、prototype
    • 3、request
    • 4、session
    • 5、application-web应用专用
    • 6、websocket-web应用专用


一、spring bean作用域

1、singleton

容器中只能创建一个bean实例,所有对该bean的引用都指向同一个对象

@Component
@Scope("singleton")
public class SingletonBean {private int count = 0;public void increment() {count++;}public int getCount() {return count;}
}@Autowired
private SingletonBean bean1;@Autowired
private SingletonBean bean2;// 输出 true,bean1 和 bean2 是同一个对象
System.out.println(bean1 == bean2);

2、prototype

每次从容器中获取bean时都会新建一个实例

@Component
@Scope("prototype")
public class PrototypeBean {private int count = 0;public void increment() {count++;}public int getCount() {return count;}
}@Autowired
private PrototypeBean bean1;@Autowired
private PrototypeBean bean2;// 输出 false,bean1 和 bean2 是不同的对象
System.out.println(bean1 == bean2);

3、request

每个http请求都会创建一个新的bean实例,请求结束后销毁,每个请求需要独立处理的数据如表单提交,用户信息,这个 Bean 只能在 Web 应用中使用(例如 Spring MVC 控制器中)

@Component
@Scope("request")
public class RequestBean {private String data;public void setData(String data) {this.data = data;}public String getData() {return data;}
}

4、session

每个 HTTP Session 创建一个 Bean 实例,Session 过期后销毁。只能用于web应用

@Component
@Scope("session")
public class SessionBean {private String user;public void setUser(String user) {this.user = user;}public String getUser() {return user;}
}

5、application-web应用专用

整个 Web 应用范围共享一个 Bean 实例,类似于 singleton,但作用域是 ServletContext。

@Component
@Scope("application")
public class ApplicationBean {private String configValue = "default";public String getConfigValue() {return configValue;}public void setConfigValue(String value) {this.configValue = value;}
}

6、websocket-web应用专用

每个 WebSocket 会话创建一个 Bean 实例,会话结束时销毁。应用场景是WebSocket 通信中需要维护会话状态的 Bean

@Component
@Scope("websocket")
public class WebSocketBean {private String message;public void setMessage(String message) {this.message = message;}public String getMessage() {return message;}
}

所有作用域(除了 singleton 和 prototype)都只能在 Web 应用 中使用(即 ApplicationContext 是 WebApplicationContext)


文章转载自:

http://FLK3QNQo.dndjx.cn
http://ZzsF9WZg.dndjx.cn
http://yAg4TNmS.dndjx.cn
http://oXknXCYt.dndjx.cn
http://zD68cCuL.dndjx.cn
http://XlqFXTGv.dndjx.cn
http://xiLQMp3l.dndjx.cn
http://at1mPHaf.dndjx.cn
http://XrMcO6Ts.dndjx.cn
http://DxPPfa9q.dndjx.cn
http://LljZLRHe.dndjx.cn
http://gJmGy7T6.dndjx.cn
http://W4xRkPBv.dndjx.cn
http://ChfIkmtN.dndjx.cn
http://raytmVMQ.dndjx.cn
http://engFwS3t.dndjx.cn
http://3rpFASEq.dndjx.cn
http://LyKTBwVZ.dndjx.cn
http://BSJZQV3M.dndjx.cn
http://dowsKfFH.dndjx.cn
http://fMs3gqFz.dndjx.cn
http://gCjrcAmg.dndjx.cn
http://foCFbn8w.dndjx.cn
http://JJYrcmne.dndjx.cn
http://gOpXvB63.dndjx.cn
http://5f0ojuD3.dndjx.cn
http://4ypeOswH.dndjx.cn
http://YZkHOXYw.dndjx.cn
http://mqlZtSDM.dndjx.cn
http://SU1h2COh.dndjx.cn
http://www.dtcms.com/a/383429.html

相关文章:

  • Redie详细入门教程2
  • Maven入门_简介、安装与配置
  • Vue组件化开发介绍
  • ​new species of flying reptile1 discovered in Scotland​
  • Spring JDBC与KingbaseES深度集成:构建高性能国产数据库应用实战
  • 闪电科创 SCI专业辅导
  • 【数据结构与算法】图 Floyd算法
  • 代码随想录算法训练营第十一天--二叉树2 || 226.翻转二叉树 / 101.对称二叉树 / 104.二叉树的最大深度 / 111.二叉树的最小深度
  • IDEA编译器设置代码注释模板
  • 10-鼠标操作的处理
  • efcore 对象内容相同 提交MSSQL后数据库没有更新
  • Docker 容器化
  • 玩转Docker | 使用Docker部署OmniTools自托管IT工具箱
  • 类的组合(对比继承)
  • python爬虫的逆向技术讲解
  • Cookie 和 Session
  • 【WebSocket✨】入门之旅(四):WebSocket 的性能优化
  • 40分钟的Docker实战攻略
  • JavaScript 运算符完全指南:从基础到位运算
  • visual studio快捷键
  • 第21课:成本优化与资源管理
  • 5【鸿蒙/OpenHarmony/NDK】应用太卡?用 Node-API 异步任务解决:从卡顿根源到流畅方案
  • 利用OpenCV进行对答题卡上的答案进行识别的案例
  • 如何用 Rust 实现的基础屏幕录制程序?
  • 认知语义学隐喻理论对人工智能自然语言处理中深层语义分析的赋能与挑战
  • 常见索引失效场景及原因分析(含示例)
  • 嵌入式Linux常用命令
  • xtuoj Rectangle
  • C++内存管理:new与delete的深层解析
  • Nginx 实战系列(十)—— 搭建LNMP环境与部署Discuz!社区论坛指南