重学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、验证结果。

在这里插入图片描述

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

STM32MP157+AD7606BSTZ四通道IEPE传感器采集方案实战(附完整电路图) 本文详细介绍了基于STM32MP157和AD7606BSTZ的四通道IEPE传感器采集方案,涵盖硬件电路设计、软件驱动开发及系统性能优化。通过精确的恒流源设计和同步采样技术,实现高精度振动信号采集,适用于工业振动监测等应用场景。 阅读详情

相关推荐

AI重塑运营商CRM:从传统办理到智能推荐的实战经验

本文探讨了AI技术如何重塑运营商CRM系统,从传统办理模式升级为智能推荐平台。文章首先分析了传统CRM系统在产品推荐效率、客户信息录入、业务流程和个性化服务等方面的痛点,提出AI赋能的解决方案。技术架构采用分层设计,包含智能推荐引擎、知识图谱系统和大模型集成三大核心模块。实战案例详细介绍了基于深度学习的智能推荐系统实现,包括用户行为特征提取、产品特征建模、推荐模型训练和实时推荐服务等关键组件代码实现,展示了AI如何提升运营商CRM系统的智能化水平和服务效率。

技术传感器的博客 1049

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

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

moteandsunlight的博客 1388

NVIDIA DGX Spark实战:如何在桌面上轻松运行200B参数大模型(附配置教程)

本文提供了NVIDIA DGX Spark在桌面端运行200B参数大模型的完整实战指南。详细介绍了从硬件初始化、系统配置、容器化环境搭建,到模型加载、量化、推理流水线编写及性能调优的全过程。重点阐述了如何利用其统一内存架构和TensorRT-LLM等工具进行高效本地推理,并探讨了通过双机互联扩展以应对超大规模模型的方法。

i3j4k5的博客 782

Bean 的六种作用域

Bean 的六种作用域

达斯米奇的博客 1725

Databricks Genie:语义编译器架构与企业级智能解析实践

语义层是现代数据平台实现自然语言查询的核心基础,其本质是将业务术语映射为可执行、可治理的数据契约。原理上依赖结构化元数据、值字典与数据血缘三支柱协同,通过分层AI代理(如Intent Parsing、Retriever、Verifier)实现意图识别→语义对齐→安全执行的闭环。技术价值在于降低SQL使用门槛的同时保障审计性、一致性和权限可控性,适用于销售运营、财务分析等一线业务场景。本文深入解析Databricks Genie作为典型语义编译器的落地逻辑,涵盖Unity Catalog知识注入、七层Agen

weixin_29053695的博客 337

KEITHLEY 2182A + 6220/6221 系列测试系统软件

6221型与2182A型相结合,是业界最完整的差分电导测量解决方案

业余程序员小徐的博客 2988

Spring Bean的五个作用域

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

Ahuuua的博客 1万+

气象干旱触发水文(农业)干旱的概率及其触发阈值的动态变化-贝叶斯copula模型

本文通过建立不同类型干旱传播过程的触发阈值模型,解析了在不同等级气象干旱胁迫下诱发次一级干旱类型的触发阈值。通过贝叶斯概率模型,我们推导了气象干旱与水文干旱、农业干旱、地下水干旱之间的条件概率关系,进一步明确了气象干旱引发水文干旱、农业干旱和地下水干旱的概率及其触发阈值。该模型有效揭示了气象干旱对各级干旱类型的传播机制及其动态变化,为干旱预警系统的建立和水资源管理提供了理论依据和技术支持。

frankgis的博客 2503

Spring 配置使用 - Bean 作用域

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

一把空心菜 5038

AI爬虫:一文讲通AI爬虫技术和原理,及34个AI爬虫工具推荐

AI 爬虫 是一种结合了传统网络爬虫技术和人工智能(AI)技术的工具,能够更智能、高效地从网页中提取和处理数据。与传统爬虫相比,AI 爬虫能够更好地处理动态内容、复杂网页结构以及非结构化数据,同时具备数据清洗、分类、情感分析等高级功能。

数据知道的博客 1万+

【ComfyUI】Z-Image 基础文生图 + 单LoRA

本文介绍了一个基于ComfyUI的Z-Image Turbo基础文生图工作流,采用轻量化UNet模型配合Qwen Image文本理解模型与LoRA风格注入,实现从文本到图像的快速生成。工作流结构清晰,包含模型加载、文本编码、采样解码等标准节点,在人物生成、构图稳定性和出图速度方面表现均衡。通过调整Prompt可控制生成内容,适合日常创作、教学演示及扩展进阶应用。

Mr数据杨 925

springBean的作用域

bean的作用域和生命周期

一条游向寒江的鱼 1373

seurat v5更新及样本整合方法

1 Seurat 对象和 Assay 类发生了变化:支持更多种类的检测和数据类型,包括磁盘上的矩阵。引入了分层结构来存储数据,例如原始计数、标准化数据和 z 得分/方差稳定数据。可以使用 $ 访问器或 LayerData 函数来访问数据。现有的 Seurat v4 函数和工作流程仍可在 v5 中使用。2 整合工作流程发生了变化:简化了整合流程,提高了速度和内存效率。整合结果与 v4 工作流程略有不同,但用户仍可在 v5 中运行 v4 整合工作流程。

hx2024的博客 2684

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

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

first_M的博客 756

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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

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

first_M的博客 590

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

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

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

first_M的博客 576

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

重学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、付费专栏及课程。

余额充值