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

04-Spring中Bean的作用域

Bean的作用域

scope的属性值

属性值作用
singleton默认单例
prototype原型每调用一次getBean()方法则获取一个新的Bean对象 , 每次注入的时候都是新对象
request一个请求对应一个Bean仅限于在WEB应用中使用 , 需要引入web的框架如SpringMvc
(global) session一个会话对应一个Bean仅限于在WEB应用中使用 , 需要引入web的框架如SpringMvc
global sessionportlet应用中专用的, portlet和servlet都是规范, servlet运行在servlet容器中如Tomcat, portlet运行在portlet容器中
application一个应用对应一个Bean仅限于在WEB应用中使用
websocket一个websocket生命周期对应一个Bean仅限于在WEB应用中使用
自定义scope很少使用

scope属性值singleton(单例)

Spring的IoC容器中默认情况下Bean对象是单例的

  • Bean对象的创建是在初始化Spring上下文的时候就完成的 , 执行getBean()方法的时候Bean对象已经创建好了 , 每次获取操作的都是那个单例的Bean对象
public class SpringBean {public SpringBean() {System.out.println("SpringBean的无参数构造方法执行");}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--默认情况下Bean对象是单例的,scope="singleton"可以省略--><bean id="sb" class="com.powernode.spring6.beans.SpringBean" />
</beans>
@Test
public void testScope(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-scope.xml");SpringBean sb1 = applicationContext.getBean("sb", SpringBean.class);//com.powernode.spring6.beans.SpringBean@5b239d7dSystem.out.println(sb1);//com.powernode.spring6.beans.SpringBean@5b239d7dSpringBean sb2 = applicationContext.getBean("sb", SpringBean.class);System.out.println(sb2);
}

scope属性值prototype(多例)

如果想让Spring的Bean对象以多例的形式存在,可以在bean标签中指定scope属性的值为prototype

  • 初始化Spring上下文时不会创建这些prototype的Bean对象 , 只有每一次执行getBean()方法的时候才会创建,调用几次创建几次 , 每次获取的都是新的对象
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="sb" class="com.powernode.spring6.beans.SpringBean" scope="prototype" />
</beans>
@Test
public void testScope(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-scope.xml");//com.powernode.spring6.beans.SpringBean@29445a7SpringBean sb1 = applicationContext.getBean("sb", SpringBean.class);System.out.println(sb1);//com.powernode.spring6.beans.SpringBean@67d48005SpringBean sb2 = applicationContext.getBean("sb", SpringBean.class);System.out.println(sb2);
}

自定义线程级别Scope(了解)

第一步: 自定义Scope实现Scope接口,实现在同一个线程中获取的Bean都是同一个, 跨线程获取的是不同的Bean对象

  • Spring内置了实现Scope接口的线程范围的类org.springframework.context.support.SimpleThreadScope

第二步: 使用CustomScopeConfigurer内置类将自定义的Scope注册到Spring容器中

<bean class="org.springframework.beans.factory.config.CustomScopeConfigurer"><!--设置scopes属性,这个属性是个map集合表示可以指定多个线程范围--><property name="scopes"><map><!--自定义线程名--><entry key="myThread"><!--这个Scope接口的实现类使用的是Spring内置的,也可以自己定义--><bean class="org.springframework.context.support.SimpleThreadScope"/></entry></map></property>
</bean>

第三步: 使用自定义线程的Scope

<bean id="sb" class="com.powernode.spring6.beans.SpringBean" scope="myThread" />
@Test
public void testCustomScope(){//主线程ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-scope.xml");SpringBean sb1 = applicationContext.getBean("sb", SpringBean.class);SpringBean sb2 = applicationContext.getBean("sb", SpringBean.class);//com.powernode.spring6.beans.SpringBean@5b236d7dSystem.out.println(sb1);//com.powernode.spring6.beans.SpringBean@5b236d7dSystem.out.println(sb2);// 启动新线程new Thread(new Runnable() {@Overridepublic void run() {SpringBean a = applicationContext.getBean("sb", SpringBean.class);SpringBean b = applicationContext.getBean("sb", SpringBean.class);//com.powernode.spring6.beans.SpringBean@29445a6System.out.println(a);//com.powernode.spring6.beans.SpringBean@29445a6System.out.println(b);}}).start();
}

相关文章:

04-Spring中Bean的作用域

Bean的作用域 scope的属性值 属性值作用singleton默认单例prototype原型每调用一次getBean()方法则获取一个新的Bean对象 , 每次注入的时候都是新对象request一个请求对应一个Bean仅限于在WEB应用中使用 , 需要引入web的框架如SpringMvc(global) session一个会话对应一个Bean…...

xlua游戏热更新(C#访问lua)

xlua作为Unity资源热更新的重要解决方案api&#xff0c;在Tecent重多游戏中被采用&#xff0c;本文通过案例去讲解xlua代码结构层次。 /** Tencent is pleased to support the open source community by making xLua available.* Copyright (C) 2016 THL A29 Limited, a Tence…...

【数据结构】二叉树经典例题---<你真的掌握二叉树了吗?>(第一弹)

一、已知一颗二叉树如下图&#xff0c;试求&#xff1a; (1)该二叉树前序、中序和后序遍历的结果。 (2)该二叉树是否为满二叉树&#xff1f;是否为完全二叉树&#xff1f; (3)将它转换成对应的树或森林。 (4)这颗二叉树的深度为多少? (5)试对该二叉树进行前序线索化。 (6)试对…...

基于springboot实现桥牌计分管理系统项目【项目源码】

基于springboot实现桥牌计分管理系统演示 JAVA简介 JavaScript是一种网络脚本语言&#xff0c;广泛运用于web应用开发&#xff0c;可以用来添加网页的格式动态效果&#xff0c;该语言不用进行预编译就直接运行&#xff0c;可以直接嵌入HTML语言中&#xff0c;写成js语言&#…...

机器学习——朴素贝叶斯

目录 一、贝叶斯方法 背景知识 贝叶斯公式 二、朴素贝叶斯原理 判别模型和生成模型 1&#xff0e;朴素贝叶斯法是典型的生成学习方法 2&#xff0e;朴素贝叶斯法的基本假设是条件独立性 3&#xff0e;朴素贝叶斯法利用贝叶斯定理与学到的联合概率模型进行分类预测 用于文…...

【PTE-day07 文件上传2】

1、常见的绕过方式 (1)畸形后缀名绕过 .php、.pht、.php3、.php4、.php5、.php2、.phtml、.pHp、.html、.Htm......(2)双写过滤字符绕过 (3).htaccess文件绕过 <FilesMatch "jpg"> SetHandler application/x-httpd-php...

设计模式之十一:代理模式

代理可以控制和管理访问。 RMI提供了客户辅助对象和服务辅助对象&#xff0c;为客户辅助对象创建和服务对象相同的方法。RMI的好处在于你不必亲自写任何网络或I/O代码。客户程序调用远程方法就和运行在客户自己本地JVM对对象进行正常方法调用一样。 步骤一&#xff1a;制作远程…...

在spring boot中调用第三方接口时重试问题

文章目录 前言 spring-retry对第三方接口做重试&#xff0c;和处理操作 一、引入依赖 <!--重试请求的注解依赖--><dependency><groupId>org.springframework.retry</groupId><artifactId>spring-retry</artifactId></dependency>&l…...

记录一次多数据源配置失效的情况

说明&#xff1a;在一些复杂的业务情景&#xff0c;比如我们需要在一个订单审核通过后&#xff0c;在将数据库状态修改的同时&#xff0c;将订单与订单详细这两条数据写入到另一个数据库中。我们就可以通过在配置文件中&#xff0c;配置多数据源&#xff0c;然后通过在Mapper的…...

EasyExcel导出替换列中的变量

基于easyexcel2.0版本 easyexcel官网&#xff1a;https://easyexcel.opensource.alibaba.com/docs/2.x/quickstart/write 测试代码地址&#xff1a;https://gitee.com/wangtianwen1996/cento-practice/blob/master/src/test/java/com/xiaobai/easyexcel/DynamicHeadTest.java …...

机器人规划算法——将多边形障碍物离散到地图像素点上?

问题一&#xff1a;如何判断一个点是否在多边形区域内&#xff1f; 方法1&#xff1a;向量叉乘判别法 设多边形的顶点依次为A1&#xff0c;A2…An&#xff0c;要判断的点为P&#xff0c;那么分别计算向量PA1叉乘向量PA2&#xff0c;向量PA2叉乘向量PA3&#xff0c;…&#xff…...

windows11使用docker部署安装minio

时间 2023-11-08 windows11使用docker部署安装minio 目录 1.docker 下载镜像2.docker安装镜像3.访问控制台4.安装问题解决5.使用教程 1.docker 下载镜像 调整镜像源到国内&#xff0c;否则会很慢 docker pull minio/minio2.docker安装镜像 设置用户名和密码时需要注意&…...

【JavaEESpring】Spring Web MVC⼊⻔

Spring Web MVC 1. 什么是 Spring Web MVC1.1 什么是 MVC ?1.2 是什么 Spring MVC? 2. 学习 Spring MVC2.1 建立连接2.2 请求2.3 响应 3. 相关代码链接 1. 什么是 Spring Web MVC 官⽅对于 Spring MVC 的描述是这样的&#xff1a; 1.1 什么是 MVC ? MVC 是 Model View C…...

flutter逆向 ACTF native app

前言 算了一下好长时间没打过CTF了,前两天看到ACTF逆向有道flutter逆向题就过来玩玩啦,花了一个下午做完了.说来也巧,我给DASCTF十月赛出的逆向题其中一道也是flutter,不过那题我难度降的相当之低啦,不知道有多少人做出来了呢~ 还原函数名 flutter逆向的一大难点就是不知道l…...

【Redis】set 集合

上一篇&#xff1a;list 列表 https://blog.csdn.net/m0_67930426/article/details/134364315?spm1001.2014.3001.5501 目录 Sadd Smembers Sismember Scard Srem ​编辑Srandomember Spop Smove 集合类 Sdiff Sinter Sunion 官网 https://redis.io/commands/?…...

【算法与设计模式】

一、数据结构与算法 1、算法性能评估 时间复杂度、空间复杂度 2、数据结构 数组与列表 队列 堆栈 链表 二叉树 多叉树 递归算法 二、设计模式 1、单例 &#xff08;1&#xff09;GIL&#xff1a;线程互斥锁。保证同一时刻只有一个线程在进行。 &#xff08;2&#xff09…...

Javaweb之javascript的小案例的详细解析

1.5.4 案例 1.5.4.1 需求说明 鲁迅说的好&#xff0c;光说不练假把式,光练不说傻把式。所以接下来我们需要通过案例来加强对于上述DOM知识的掌握。需求如下3个&#xff1a; 点亮灯泡 将所有的div标签的标签体内容后面加上&#xff1a;very good 使所有的复选框呈现被选中的…...

Vant 移动端UI 组件自动引入

Vue项目中安装Vant # Vue 3 项目&#xff0c;安装最新版 Vant npm i vant 组件按需引入配置 Vant按需引入- - -安装&#xff1a;unplugin-vue-components 插件 unplugin-vue-components 插件可以在Vue文件中自动引入组件&#xff08;包括项目自身的组件和各种组件库中的组件&…...

敏捷开发是什么?敏捷开发流程是怎么样的?

1. 什么是敏捷开发&#xff1f; 敏捷开发是一种迭代、增量式的软件开发方法&#xff0c;旨在通过灵活、协作和快速响应变化的方式&#xff0c;提高开发团队的效率和产品的质量。相较于传统的瀑布式开发模型&#xff0c;敏捷开发更加注重用户需求的响应和团队协作&#xff0…...

【CASS精品教程】cass3d 11.0加载超大影像、三维模型、点云数据

CAD2016+CASS11.0(内置3d)下载与安装: 【CASS精品教程】CAD2016+CASS11.0安装教程(附CASS11.0安装包下载)https://geostorm.blog.csdn.net/article/details/132392530 一、cass11.0 3d支持的数据 cass11.0中的3d模块增加了多种数据的支持,主要有: 1. 三维模型 点击…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...