重学Spring框架系列之——设置Bean的作用域

重学Spring(二:IOC的XML配置) 接着上一期来继续学习IOC容器的xml配置: 一、复杂类型的赋值 <!--给数组赋值, 使用array标签--> <!--<property name="hobbies" value="book,sport,movie"></property>--> <property name="hobbies"> <array> <value>book</value> <va 阅读详情

Bean的作用域

在Spring中,默认情况下创建的bean都是单实例对象,当然也可以通过实际的需求进行修改。我们可以将这种操作视为设置bean的作用域。实现的方式有配置文件和注解两种形式,然而不论是哪种方式它们都对应了四种作用域。

这四种作用域分别为:

singleton(默认值):表示创建的对象是单实例的。
prototype:表示创建的对象是多实例的。
request:表示一次请求生成一个实例。
session:表示一次会话生成一个实例。

注:在这四种作用域中,singleton和prototype比较常用,进而演示的时候也是以这两种为主。

代码演示

编写用于演示的两个java类

public class User {

}

public class Car {

}

通过xml形式设置bean的作用域

1、编写配置文件。

通过设置bean标签的scope属性来设置bean的作用域。

<!-- 注入User类,设置bean为单实例。scope="singleton"可以省略不写,因为spring默认创建的bean就是单实例的 -->
<bean id="user" class="com.springtest.bean.User" scope="singleton"/>
<!-- 注Car类,设置bean为多实例 -->
<bean id="car" class="com.springtest.bean.Car" scope="prototype"/>

2、编写测试类进行验证。

@Test
public void test1() {
    // 创建Spring的IOC容器
    ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
    // User设置的是单实例,Car设置的多实例。通过比较地址进行验证。
    Object user1 = context.getBean("user");
    Object user2 = context.getBean("user");
    if(user1 == user2) {
      System.out.println("通过Spring创建的User是单实例对象!");
    } else {
      System.out.println("通过Spring创建的User是多实例对象!");
    }
    Object car1 = context.getBean("car");
    Object car2 = context.getBean("car");
    if(car1 == car2) {
      System.out.println("通过Spring创建的Car是单实例对象!");
    } else {
      System.out.println("通过Spring创建的Car是多实例对象!");
    }
}

3、验证结果。

在这里插入图片描述

通过注解形式设置bean的作用域

使用@scope注解可以设置bean的作用域。该注解可作用在类和方法上。通过设置注解value属性的值来设置bean的作用域。value属性的取值范围和通过xml形式设置时一样。

1、编写配置类,并通过@Bean注解注bean。

@Configuration
public class BeanScopeConfig {

  @Bean
  @Scope(value = "prototype") // 设置User为多实例
  public User user() {
    return new User();
  }

  @Bean
  @Scope(value = "singleton") // 设置Car为单实例
  public Car car() {
    return new Car();
  }
}

2、编写测试类进行验证。

@Test
public void test2() {
    // 创建Spring的IOC容器
    ApplicationContext context = new AnnotationConfigApplicationContext(BeanScopeConfig.class);
    // User设置的是多实例,Car设置的单实例。通过比较地址进行验证。
    Object user1 = context.getBean("user");
    Object user2 = context.getBean("user");
    String userScope = user1 == user2 ? "User为单实例对象!" : "User为多实例对象!";
    System.out.println(userScope);
    Object car1 = context.getBean("car");
    Object car2 = context.getBean("car");
    String carScope = car1 == car2 ? "Car为单实例对象!" : "Car为多实例对象!";
    System.out.println(carScope);
}

3、验证结果。

在这里插入图片描述

今天的分享就到这里了,如果感觉“菜鸟”写的文章还不错,记得点赞、转发加关注呦!你们的支持就是我坚持下去的动力。文章哪里写的有问题的也希望大家可以指出,我会虚心受教。

CXL ALMP(ARB/MUX Link Management Packet)理解 ALMP(ARB/MUX Link Management Packet) 是CXL协议中由ARB/MUX层生成和处理的专用管理报文,用于协调链路电源状态切换(如L0s/L1)和虚拟链路状态机(vLSM)同步。ALMP是ARB/MUX层的控制平面报文,专用于以下场景:协调多协议(CXL.io、CXL.cachemem等)的链路状态切换(如L1进入/退出)。维护各协议独立的虚拟链路状态机(vLSM) 状态同步。在物理层(PHY)与链路层(Link Layer)之间仲裁电源管理请求。 阅读详情

相关推荐

手把手教你用Qt5打造二次元游戏启动器(附鸣潮同款UI源码)

本文详细介绍了如何使用Qt5框架从零开始构建一个功能完整、UI风格贴近《鸣潮》的二次元游戏启动器。教程涵盖无边框窗口、动态背景、自定义控件绘制、多线程资源加载以及下载管理等核心模块的实现,并提供了可运行的源码参考,帮助C++开发者和Qt爱好者深入掌握现代桌面应用开发技术。

weixin_29291863的博客 264

Bean的六种作用域及设置方式

Bean作用域:是指Bean在Spring框架中的某种行为模式/可用范围。Spring容器在初始化一个Bean的实例时,同时会指定该实例的作用域。例如singleton单例模式,就表示Bean在整个Spring中只有一份,它是全局共享的,当其他人修改了这个值,另一个人读取到的就是被修改的值。Spring中的Bean一共有6种作用域,前两种时core项目和MVC项目都可以用的,后四种是必须基于MVC项目的。即core项目中Bean有两种作用域,MVC项目中Bean有6种作用域。

moteandsunlight的博客 1388

Chronos时间序列预测实战:从零开始微调你的第一个大语言模型(附完整代码)

本文提供了一份详细的Chronos时间序列预测大语言模型微调实战指南。从环境搭建、数据预处理到模型配置与训练,手把手教你如何利用自己的数据微调Chronos模型,并完成评估与部署,助你快速掌握这一前沿技术。

zzz56的博客 300

Bean 的六种作用域

Bean 的六种作用域

达斯米奇的博客 1725

基于Python+OpenCV中文及符号检测

一、项目背景与意义在图像处理、文档识别、自动翻译等场景中,中文及符号的准确检测是一个重要且复杂的任务。传统的字符检测方法往往对英文等拉丁字母系的识别效果较好,但对中文及特殊符号的识别准确率较低。本项目旨在利用Python编程语言结合OpenCV库,开发一个能够高效、准确地检测图像中中文及符号的系统,为相关领域的研究和应用提供技术支撑。二、技术实现图像预处理:利用OpenCV的图像处理功能,对输入的图像进行灰度化、二值化、滤波去噪等预处理操作,以提高中文及符号检测的准确性[1]。

2301_79809972的博客 1119

若依框架整合Flowable:从零构建企业级流程中心

本文详细介绍了如何将若依框架与Flowable工作流引擎整合,构建企业级流程中心。通过环境配置、依赖添加、数据库设置等核心步骤,实现流程定义管理、任务处理服务等关键功能,并结合实际案例展示请假审批流程的实现与动态表单集成。文章还提供了性能优化和生产建议,帮助开发者高效构建稳定可靠的工作流系统。

weixin_28365523的博客 228

Spring Bean的五个作用域

Spring支持五个作用域:singleton、prototype、request、session、global session

Ahuuua的博客 1万+

《解锁GCC版本选择的奥秘:从入门到精通》

GCC 版本的选择是一项复杂而关键的决策,犹如一场精心策划的战略布局,贯穿于软件开发的整个生命周期。从项目需求与兼容性的深度考量,到性能与稳定性的权衡抉择,再到硬件与系统适配的精准对接,每一个环节都紧密相连,相互影响。在游戏开发行业,对性能的极致追求促使开发者青睐较新的 GCC 版本,以实现更流畅的游戏体验和更震撼的视觉效果;科学计算领域则依赖于 GCC 版本对复杂数学运算的高效优化,以应对大规模数据处理的挑战;嵌入式开发行业因硬件资源的限制和对稳定性的严苛要求,通常选择经过长期验证的稳定版本;

zheng_ruiguo的专栏 1417

Spring 配置使用 - Bean 作用域

基本概念Scope,也称作用域,在 Spring IoC 容器是指其创建的 Bean 对象相对于其他 Bean 对象的请求可见范围。在 Spring IoC 容器中具有以下几种作用域:基本作用域(request、prototype),Web 作用域(reqeust、session、globalsession),自定义作用域。Spring 的作用域在装配 Bean 时就必须在配置文件中指明,配置方式如

一把空心菜 5038

DeFi核心协议代码解析

本文解析了DeFi两大核心协议Uniswap V2和Compound的智能合约架构与关键代码。Uniswap V2采用恒定乘积公式(x*y=k)实现自动做市,核心合约包括Factory、Pair和Router,具备流动性铸造、代币兑换和TWAP预言机功能。Compound借贷协议通过cToken合约管理存款和借款,采用动态利率模型和抵押率机制,包含资金利用率计算、清算触发等核心算法。两协议均采用模块化设计,通过智能合约实现去中心化金融服务的核心逻辑。

闲人编程的博客 935

运维简历优化指南,DeepSeek助您运维简历秒变高分!

例如,当掌握了新的运维技术,如 Serverless 架构的运维管理,就将其添加到简历的专业技能部分,并简要描述在相关项目中的应用情况和成果,如 “在 [项目名称] 中,负责 Serverless 架构的运维工作,成功实现了应用的低成本、高弹性运行,降低了运维成本 30%”。上传简历至 DeepSeek,并输入指令:“请根据以下岗位招聘要求,帮我重新解构我的简历,按照【教育背景→实习经历→项目经历→个人评价→技能证书】的模块,输出一份符合下述岗位的简历,提升我的求职竞争力。

大模型大数据攻城狮的专栏 1467

springBean的作用域

bean的作用域和生命周期

一条游向寒江的鱼 1373

YOLOv13改进策略【Backbone/轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块

本文记录的是。StarNet设计简洁,没有复杂的设计和精细调整的超参数,仅是一个 4 阶段的分层架构。并且其中能够在低维空间计算的同时考虑极高维的特征这一特性,进而提高模型精度。本文在替换骨干网络中配置了原论文中的starnet_s1starnet_s2starnet_s3和starnet_s4七种模型,以满足不同的需求。

Limiiiing的博客 669

重学Spring框架系列之——设置Bean的加载时机

本文可能会涉及到一些bena的作用域相关的知识,如果对其不是特别了解的可以查看我上一篇文章。 bean的作用域为singleton和prototype时,其对应的加载时机是不同的。 通常情况下spring中bean为单例时,bean实例的创建是在加载配置文件或配置类时创建的,而bean为多实例时,bean实例的创建是在获取该实例时创建的。 通过文字描述可能比较抽象下面通过代码来查看一下。 注意:spring创建实例时默认调用的是无参构造,下面我们在无参构造中加上输出语句用于查看调用时机。 public c

first_M的博客 756

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

重学Spring框架系列之——什么是Spring框架

说在前面 Spring框架算得上是java程序员必备的一项技能了。不论是早期的SSM或SSH架构,还是现在流行的SpringBoot加SpringCloud构建的分布式、微服务架构。Spring在其中扮演着不可或缺的角色,其重要性也是不言而喻的。 为了更好的工作和自身的提升,菜鸟又重新学习了一下Spring框架,在学习的过程中也有一些收获,从而想着通过文章将自己的学习过程记录下来。也希望可以帮助到有需要的人。如果文章中存在不合理或错误的地方也希望大家可以提出来,我会及时改正,希望我们可以一起进步。 既然我们

first_M的博客 590

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

重学Spring框架系列之——使用Spring创建自定义Bean的实例

本文将为大家讲解一下如何使用Spring创建自定义的类的实例,也就是将自定义的类交由Spring来管理。下面将会通过XML和注解两种形式来进行演示。 环境准备 为了方便,下面将采取Maven项目进行演示。 pom.xml中添加Spring环境的spring-context和用于测试的junit坐标。 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-contex

first_M的博客 576

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

重学Spring总结

重学Spring总结

北执南念的博客 1256

重学Spring5

1. Spring 1.1 简介 Spring : 春天 2002年,首次推出Spring框架的雏形 : interface21框架 <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-

weixin_45607293的博客 217

手写简易版 Spring框架

文章目录前言目前已实现1 简单校验2 扫描配置3 根据扫描到的配置组装 BeanDefinition4 根据 BeanDefinition 创建非懒加载、并且是单例的bean,存储到单例池5 增加 BeanNameAware 接口6 增加 InitializingBean 接口7 增加 BeanPostProcessor 接口延伸阅读 前言 最近项目里有大量的 “长的很像的代码”。这类代码,用到了工厂模式、建造者模式,但是最终由于业务复杂,而且功能上是对接平台的,因此会有上百个这种类,每个都不一样。 出于对

FBB360JAVA的博客 1425

菜鸟重学Spring

构建一个spring项目 1、创建一个工程,导入spring 所需的jar包 commons-logging-1.1.1 spring-aop-4.1.6.RELEASE spring-aspects-4.1.6.RELEASE spring-beans-4.1.6.RELEASE spring-context-4.1.6.RELEASE spring-context-support-4.1.6.RELEASE spring-core-4.1.6.RELEASE spring-expressi

cong__cong__cong的博客 284

Spring学习笔记(一) IOC ,bean的配置

最近看到一些帖子很多内容不明白应该开始理解一下基础,不能只会用所以博主决定重学一下SSM和一些基础重点。 目录 什么是IOC :不是技术,是一种设计思想!!!!! Bean的配置和获取方式 配置bean 配置bean的属性 内部bean可以不配置id ,这样其它的bean就无法引用的. 给bean对象的集合类型属性赋值 (这里的集合看成bean的一个属性即可)...

来杯Java 424

爱上源码,重学Spring IoC深入

简单回顾下通俗的讲就是N个Bean互相引用对方,最终形成闭环。项目代码介绍如下(测试类入口: CircleTest.java)配置文件userServiceImplA代码如下return "在UserServiceImplA的Bean中" + "userServiceImplB注入成功>>>>>>>>>" + userServiceImplB;} }

博学谷狂野架构师的博客 735

从官方文档重学spring5

这个注解支持与或非表达式。& |)还可以使用这个注解作为元注解,更加见名知意。5.可以启用响应数据压缩。

qq_47962462的博客 184

爱上源码,重学 Spring 之 IoC 深入源码

简单回顾下通俗的讲就是 N 个 Bean 互相引用对方,最终形成闭环。项目代码介绍如下(测试类入口: CircleTest.java)配置文件userServiceImplA 代码如下}@Overridereturn "在UserServiceImplA的Bean中" +

Candyz7的博客 609

重学lagou | 面试复习(二)Spring

具体过程:判断循环所有的BeanPostProcessor,然后我们aop什么时候被加进来的后置处理器?FactoryBean是spring当中的一个特殊的bean,它是一个接口,实现了FactoryBean的bean能够再创建一个bean,如果你的类实现了FactoryBean,那么spring容器当中存在两个对象,一个是通过getObject()返回的对象,还有一个为当前对象,getObject得到的对象存的是当前类@Component(“名字”)指定的名字,当前对象是“&”+指定的名字。

零一的博客 233

重学SpringBoot3-Profiles介绍

在现代软件开发中,应用通常需要在多个环境(如开发、测试、生产)中运行,每个环境可能需要不同的配置设置。Spring Boot 3 继续支持和扩展了 Profiles 的概念,提供了一种灵活且强大的方式来根据当前环境定制应用的行为。本文将介绍 Spring Boot 3 中 Profiles 的使用方法、最佳实践,以及如何利用它们来优化你的应用配置。

CoderJia的学习之路 2266
上一篇: 重学Spring框架系列之——使用Spring创建自定义Bean的实例
下一篇: 重学Spring框架系列之——设置Bean的加载时机
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值