《Spring6》第13节:bean标签常见属性介绍之scope属性(作用域)

《Spring6》第13节:bean标签常见属性介绍之scope属性(作用域)Spring6 第 13 节 bean 标签常见属性介绍之 scope 属性 作用域 前面已经介绍了 Spring 中 Bean 实例化和依赖注入的相关内容 相信各位小伙伴应该对 Spring 框架已经有了初步的了解 这一小节让我们一起继续学习 Spring 的相

大家好,欢迎来到IT知识分享网。

《Spring6》第13节:bean标签常见属性介绍之scope属性(作用域)

前面已经介绍了Spring中Bean实例化和依赖注入的相关内容,相信各位小伙伴应该对Spring框架已经有了初步的了解,这一小节让我们一起继续学习Spring的相关内容。

在前几个小节里面,我们在XML配置文件频繁的使用到了<bean>标签,这个标签可以说是Spring中的核心标签之一,后续几个小节的内容,我将逐一介绍<bean>标签中的相关属性,最后这一个小节来介绍一下scope属性。

1.1、scope作用域

scope属性的作用:用于设置Bean的作用域。什么是Bean的作用域呢???这里的作用域其实是指Bean的使用范围,Spring中提供了六种作用域,如下所示:

属性值

名称

说明

singleton

单例Bean

这里的单例Bean,是指在整个IOC容器里面,只会存在一个Bean对象。注意:这是Spring中默认的Bean作用域。

prototype

原型Bean

原型Bean是指可以多次创建的Bean对象,也就是非单例Bean的意思。

request

同一次请求内有效

request作用域,只能够在web应用程序下使用,表示在同一个request请求里面,Bean对象是单例的。request请求结束之后,创建的Bean对象也就随之销毁了。

session

同一次会话内有效

session作用域,只能够在web应用程序下使用,表示在同一次session会话里面,Bean对象是单例的。session会话结束之后,创建的Bean对象也就随之销毁了。一般情况下,从浏览器打开到关闭的这段时间内,属于一次session会话。

application

应用程序内有效

application作用域是最大的,只能够在web应用程序下使用,表示Bean对象可以一直存活在当前整个Web应用程序运行阶段,只有程序停止之后,才会销毁。即:也就是对应ServletContext级别。

websocket

websocket请求内有效

websocket作用域只能够在web应用程序下使用,它定义的Bean对象可以在websocket的生命周期内一直存活,Bean对象是单例的。

以上就是Spring中提供的socpe作用域属性,其中使用最多的是singletonprototype两个作用域,默认情况下,Spring是采用单例Bean的作用域,也就是singleton作用域。

  • 不过,在实际开发过程中,我好像也没有遇到过需要修改Bean作用域的需求,一般情况下,都是使用Spring默认的作用域就足够了。

这篇文章我们就简单介绍一下singletonprototype这两种作用域,其他的作用域了解一下即可。下面我们就通过代码来看看,singletonprototype两种作用域下,获取到的Bean对象有什么区别。

1.2、案例代码

  • 首先,创建一个AService类和BService类。
public class AService { } public class BService { }
  • 接着分别将两个Bean对象的scope属性设置成singletonprototype
<?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 https://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 定义bean,指定作用域 singleton --> <bean id="aService" class="com.spring.study.AService" scope="singleton"/> <!-- 定义bean,指定作用域 prototype --> <bean id="bService" class="com.spring.study.BService" scope="prototype"/> </beans>
  • 最后,我们分别多次获取AService对象和BService对象,查看每次获取到的Bean对象是否相同即可。
public class TestCode { public static void main(String[] args) { // 1、创建IOC容器 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); // 2、获取 AService for (int i = 0; i < 3; i++) { AService aService = context.getBean(AService.class); System.out.println("获取AService对象:" + aService); } System.out.println(); // 2、获取 AService for (int i = 0; i < 3; i++) { BService bService = context.getBean(BService.class); System.out.println("获取BService对象:" + bService); } } }
  • 运行上面代码之后,你可以发现,使用singleton作用域的Bean对象,不管获取多少次,每次获取到的Bean都是同一个;而使用prototype作用域的Bean对象,每次获取到的都是不一样的,运行结果如下:
《Spring6》第13节:bean标签常见属性介绍之scope属性(作用域)

通过以上案例代码,我们可以看出singletonprototype两个作用域的区别了吧。

1.3、源代码获取

源代码地址:

https://gitcode.com/knowledge-base/spring-study/tree/spring6-chapter-13

到此,Spring中<bean>标签的scope属性就介绍完了。

今天就到这里,未完待续~~

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/182773.html

(0)
上一篇 2025-07-08 12:00
下一篇 2025-07-08 12:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信