Spring中Bean的作用域有哪些?

在Spring框架中,Bean的作用域定义了由Spring IoC容器创建的Bean实例的可见范围和生命周期。Spring提供了几种不同的Bean作用域供我们根据需求选择使用,每种作用域都有其特定的用途。常用的作用域包括:

  1. Singleton(单例):这是默认的作用域。在这个作用域下,Spring IoC容器对每个spring容器中的Bean配置信息只创建一个Bean实例。无论我们是否请求它多次,每次都将获得相同的对象实例。适用于无状态的Bean。

  2. Prototype(原型):在这个作用域下,每次请求(调用getBean()方法)时,Spring都会创建一个新的Bean实例。这意味着如果你的应用需要非单例模式的Bean,应该选择原型作用域。

  3. Request(请求):仅在Web应用中有效,这意呀着每个HTTP请求都会产生一个新的Bean,且该Bean实例仅在当前HTTP request内有效。

  4. Session(会话):也是仅在Web应用中有效,这意味着每次HTTP会话都会产生一个新的Bean,且该Bean实例仅在当前HTTP session内有效。

  5. Global session(全局会话):仅在Portlet应用中有效,这意味着全局HTTP会话中共享一个Bean实例。

  6. Application(应用):在整个Web应用中,每个ServletContext只有一个Bean实例。这在整个应用范围内共享Bean时非常有用。

  7. WebSocket(WebSocket作用域):在WebSocket生命周期内,每个WebSocket会话都有一个Bean实例。

代码示例:

定义一个单例(Singleton)作用域的Bean:

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;@Component
@Scope("singleton") // 或 @Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
public class SingletonBean {// 类实现
}

定义一个原型(Prototype)作用域的Bean:

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;@Component
@Scope("prototype")
public class PrototypeBean {// 类实现
}

使用场景提示:

  • Singleton:适用于大多数情况,特别是当Bean是无状态的,或者你想要在应用中共享同一个状态。
  • Prototype:适用于每个使用时都需要一个新实例的情况,比如涉及到并发操作的场景。
  • Request, Session, GlobalSession:这些作用域通常用于根据Web应用的不同范围来管理Bean,如跨请求、会话或全局会话共享数据。
  • Application:当你想在整个Web应用中共享某些全局数据时使用。
  • WebSocket:在用Spring支持WebSocket时,可以利用这个作用域来管理在WebSocket会话生命周期内的Bean实例。

现在你应该对Spring中的Bean作用域有了一个大致的理解。每个作用域都有其特定的使用场景,选择适合的作用域可以让Spring更好地管理Bean的生命周期及其实例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/14362.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业签名有什么优点?

企业签名具有以下优点: 1.自定义企业分发:为企业提供更大的灵活性和控制权 2.加强企业安全性: 控制分发 减少潜在风险、数据泄露 3.内部应用更新和管理:企业可自主更新和管理内部分发。灵活发布新版本应用程序,修复bug…

大型语言模型(LLM)论文串烧

近期把各家大型语言模型的论文过了一遍,包括: Qwen Llama 2 BlueLM GLM-130B Baichuan2 Yi 刚好趁着刚看完还有印象稍微做下总结。

「动态规划」地下城游戏

力扣原题链接,点击跳转。 有一个地下城,我们用mn大小的二维数组dungeon表示。dungeon[i][j]如果为正,该位置有血包,可以加血量;如果为负,该位置有恶魔,会扣掉相应的血量。有一个骑士在左上角&a…

科技产业园3D探秘:未来科技之城的奇幻之旅

在数字时代的浪潮中,科技产业园区成为了推动城市经济发展、科技创新的重要引擎。 当我们打开科技产业园的3D可视化模型,仿佛穿越时空,来到了一个充满奇幻色彩的科技世界。在这里,高楼大厦鳞次栉比,绿色植被点缀其间&am…

【文末附gpt升级方案】革新多模态学习:哈工大团队推出“Uni-MoE”统一多模态大模型的跨域MoE研究

革新多模态学习:哈工大团队推出“Uni-MoE”统一多模态大模型的跨域MoE研究 摘要:随着人工智能技术的飞速发展,多模态学习已成为机器学习领域的重要研究方向。然而,传统的多模态学习方法往往存在信息融合困难、模型复杂度高等问题…

深度学习模型keras第二十三讲:在KerasCV中使用SAM进行任何图像分割

1 SAM概念 ###1.1 SAM定义 Segment Anything Model(SAM)是一种基于深度学习的图像分割模型,其主要特点包括: 高质量的图像分割:SAM可以从输入提示(如点、框、文字等)生成高质量的对象掩模&am…

我爱我家:租赁下位替代买房,能行吗?

我爱我家,凭什么五天四板? 上周五的楼市组合拳出台后,地产板块迎来高潮。 这其中最火的不是我们常说的“招宝万金”,而是——我爱我家。 五天四板,一个月不到,股价轻松翻翻。 公司有什么变化吗&#xff1…

Flutter 页面布局 Flex Expanded弹性布局

题记 —— 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天。 什么是弹性布局(Flex)? 弹性布局(Flex)是一种基于弹性盒子模型的布局方式,类…

C语言例题46、根据公式π/4=1-1/3+1/5-1/7+1/9-1/11+…,计算π的近似值,当最后一项的绝对值小于0.000001为止

#include <stdio.h> #include <math.h>int main() {int fm 1;//分母double sign 1;//正负号double fzs 1;//分子式double sum 0;while (fabs(fzs) > 0.000001) {sum fzs;sign * -1; //变换正负号fm 2; //分母3、5、7、9...增长fzs sign / fm;//分子式…

算法思想汇总

95% 的算法都是基于这 6 种算法思想 - 知乎 一文图解弄懂八大常用算法思想&#xff01; - 掘金 八种常用算法思想 | 智能后端和架构 【总结】递归、回溯、深度优先、广度优先_递归算法与深度优先算法-CSDN博客 https://www.cnblogs.com/cdaniu/p/16369446.html

9.6 Go语言入门(数组、切片和指针)

Go语言入门&#xff08;数组、切片和指针&#xff09; 目录五、数组、切片和指针1. 数组1.1 声明和初始化数组1.2 访问和修改数组元素1.3 多维数组 2. 切片2.1 声明和初始化切片2.2 访问和修改切片元素2.3 切片操作2.4 切片的追加和拷贝 3. 指针3.1 声明和初始化指针3.2 指针与…

【资料分享】你敢相信这些高大上的BI仪表盘都是用EXCEL做出来的?!

引言 现在大家都知道数据可视化、数据看板&#xff0c;几乎每个公司部门都有仪表盘的需求。 近年来&#xff0c;学习可视化软件的人也越来越多&#xff0c;国外Tableau、PowerBI就是这一领域的领先者&#xff0c;而国内也有不少厂家在研发数据可视化软件&#xff0c;比如帆软…

【前端每日基础】day18——css清除浮动

在CSS中&#xff0c;浮动&#xff08;float&#xff09;是一种常见的布局技术&#xff0c;但它常常导致父容器的高度无法自动扩展以包含浮动的子元素。这时就需要清除浮动。以下是几种常用的清除浮动的方法&#xff1a; 使用清除元素&#xff08;Clearfix&#xff09; Clearfi…

如何用java做一个模拟登录画面

要求&#xff1a; 实现registerAction方法中的注册逻辑。实现login方法中的登录逻辑&#xff0c;确保只有当用户名和密码都正确时才返回true。实现好友管理功能&#xff0c;包括添加好友、删除好友、查看好友列表。确保所有的文件操作&#xff08;如读取和写入credentials.txt…

Pytorch深度学习实践笔记4

&#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;pytorch深度学习 &#x1f380;CSDN主页 发狂的小花 &#x1f304;人生秘诀&#xff1a;学习的本质就是极致重复! 视频来自【b站刘二大人】 1 反向传播 Back propaga…

INES文件头解析

ines_header.h #pragma once/* ** NES ROM 标头信息格式 ** FlameCyclone ** 2024.5.11 ** (https://gitee.com/flame_cyclone/ines-info.git) */#include <stdint.h> #include <string.h>// INES ROM 标头 // https://www.nesdev.org/wiki/INES typedef struct _…

信息化项目交付验收流程管理办法

项目交付验收流程制度 管理办法 (执行版) (文件编号: ) 编制: 审核: 批准: 版本: 生效日期: 管理办法概述 制定目的为了保证公司在建项目交付验收工作事项的顺利开展,保证交付验收进度及…

POJ 1463 Strategic game/洛谷UVA1292(树形dp)

P O J 1463 S t r a t e g i c g a m e \Huge{POJ\ 1463\ Strategic game} POJ 1463 Strategicgame 文章目录 题意思路标程 题目地址1&#xff1a;1463 – Strategic game (poj.org) 题目地址2&#xff1a;Strategic game - 洛谷 题目地址3&#xff1a;P2016 战略游戏 - 洛谷 …

创新力作 焕新首发丨捷顺科技·捷曜系列智慧停车新品全新上市

2024捷顺科技智慧停车全家族新品全面上市 全新外观、全新特性、全新体验 新控制机、新道闸、新超眸相机... 每款新品都有哪些功能亮点 带您一探究竟

解决vue3 vite打包报Root file specified for compilation问题

解决方法&#xff1a; 修改package.json打包命令 把 "build": "vue-tsc --noEmit && vite build" 修改为 "build": "vite build" 就可以了 另外关于allowJs这个问题&#xff0c;在tsconfig.json文件中配置"allowJs&qu…