springBean的作用域

news2024/11/15 3:55:25

前言:最近在进行springBean的作用域学习,并且学习了对应的例子。这里进行一下总结

一:Bean的作用域基础概念

如果想学习SpringBean的生命周期,那么就必须要学习Bean的作用域。因为不同的作用域的bean的生命周期不同

1:singleton(唯一bean实例,由Spring容器管理其生命周期)
2:prototype(原型bean,创建后容器不管理其生命周期)
3:request(每次http都产生新的bean,仅在http request内有效)
4:session(首次http请求创建一个实例,作用域是浏览器首次访问直至浏览器关闭)
5:global-session(全局 session 作用域,仅仅在基于 Portlet 的 web 应用中才有意义,Spring5 已经没有了。
  1. singleton 是默认的作用域,我们如果不对bean的scope配置项进行配置的话,默认就是Singleton类型。 在创建起容器时就同时自动创建了一个 bean 的对象,不管你是否使用,他都存在了,每次获取到的对象都是同一个对象。
  2. prototype: 原型bean,每次对此类型的bean进行请求的时候,都会创建一个新的bean实例。与我们 java中的new效果类似。Spring 只负责创建,当容器创建了 Bean 的实例后,Bean 的实例就交给客户端代码管理,Spring 容器将不再跟踪其生命周期。
  3. request:每次HTTP请求都会创建一个新的Bean
  4. session:首次http请求创建一个实例,作用域是浏览器首次访问直至浏览器关闭
  5. global-session:作用域范围是WebApplicationContext中。一般用于Portlet应用环境,该运用域仅适用于WebApplicationContext环境。
    后三种只有在web环境下才有效。

bean的作用域具体实现

我针对对前两种作用域编写了一个对应的例子,这是一个普通的Maven项目,引进了spring的包。首先看一下项目结构
在这里插入图片描述
1.空的AService类

/**
 * @BelongsProject: demo
 * @BelongsPackage: com.tfjy.test
 * @Author: haolizhuo
 * @Description: A服务类
 * @CreateTime: 2023-01-28 09:59
 * @Version: 1.0
 */
@Component
//@Scope("prototype")
public class AService {

}
  1. xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-4.0.xsd">

    <!--开启注解的支持-->
    <context:annotation-config/>
    <!-- 自动扫描指定包及其子包下的所有Bean类 -->
    <context:component-scan base-package="com.tfjy.test"/>

    <!--    将AService设置为原型bean-->
<!--    <bean id="AService" class="com.tfjy.test.AService" scope="prototype"></bean>-->

</beans>
  1. Test测试类
/**
 * @BelongsProject: demo
 * @BelongsPackage: PACKAGE_NAME
 * @Author: haolizhuo
 * @Description: test测试类
 * @CreateTime: 2023-01-28 10:01
 * @Version: 1.0
 */
public class Test {
    //bean验证
    @org.junit.Test
    public void beanTest(){
        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");

        AService aServiceOne = context.getBean("AService",AService.class);
        AService aServiceTwo = context.getBean("AService",AService.class);

        System.out.println(aServiceOne);
        System.out.println(aServiceTwo);
        //通过equals方法判断两个对象是否相等
        if(aServiceOne.equals(aServiceTwo)){
            System.out.println("两次getBean方法,获得了同一个单例对象");
        }else{
            System.out.println("两次getBean方法,获得的不是同一个单例对象");
        }
    }
}

4.pom文件引入的依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.15.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

代码分析

上述代码中直接运行的话,是没有配置bean的作用域的。所以控制台会打印,两次getBean方法,获得了同一个单例对象
在这里插入图片描述
我们设置bean对象为prototype类型的方式也有两种。
1.注解方式。
在需要交由IOC容器管理的bean对象类上面添加@Scope(“prototype”)注解。
2.xml配置文件方式

  <bean id="AService" class="com.tfjy.test.AService" scope="prototype"></bean>

这两种方式设置任意一种,spring加载bean的时候都会去读取配置,并将对应bean设置为prototype类型。
在这里插入图片描述

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

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

相关文章

基于VS2019的ceres solver配置

一、ceres solver介绍Ceres Solver 是一个开源的C库&#xff0c;用于建模和解决大型、复杂的优化问题。它可以用来解决有边界约束的非线性最小二乘法问题和一般无约束的优化问题。官网&#xff1a;http://www.ceres-solver.org/案例网址&#xff1a;http://www.ceres-solver.or…

【数据结构】各排序方法比较

文章目录一、时间性能二、空间性能三、排序方法的稳定性能四、关于排序方法的时间复杂度的下限一、时间性能 按照平均时间性能来分&#xff0c;有三类排序方法&#xff1a; 时间复杂度为 O(nlogn)的方法有&#xff1a; 快速排序、堆排序、归并排序&#xff0c;其中以快速排序最…

Cesium 常见错误集

解决cesium widgets.css is not exported from package 在版本1.9以上版本后,按照官方文档引入css 时 会报错:cesium widgets.css is not exported from package 解决方案: 1.node_modules里找到cesium的package.json文件,在exports里增加导出widgets.css [rml_read_mo…

华为HCIE学习之open stack开篇(笔记)

文章目录一、云计算和虚拟化的区别二、Openstack的作用三、Openstack部署方式四、Openstack内的一些概念1、租户2、镜像3、规格4、网络一、云计算和虚拟化的区别 云计算是一种服务模式&#xff0c;而虚拟化是一种具体的技术。 二、Openstack的作用 Openstack是一个云操作系统…

小程序开发(五)

上拉触底进行节流处理在data中定义isloading发起请求时完成时回调事件响应式判断自定义编译模式&#xff1a;》编译自动跳转生命周期&#xff1a;onlaunch 初始化完成 只执行一次onShow&#xff1a;切换到前台onHide&#xff1a;切换到后台app.js :onReady :渲染完成才可以修改…

优秀的代码最终选择if else,还是switch case

今天我们不讨论哪个写法读起来更优秀&#xff0c;不讨论对于性能而言哪个更完美&#xff0c;也不讨论哪种情况下对于判断语句是常量还是变量的选择&#xff0c;而是单纯从最简单的角度来看一下&#xff0c;为什么很多优秀的项目优秀的代码&#xff0c;最终选择了if else语句&am…

惠普Probook450G7电脑开机总是卡死蓝屏怎么重装系统?

惠普Probook450G7电脑开机总是卡死蓝屏怎么重装系统&#xff1f;有用户在使用惠普Probook450G7电脑的时候&#xff0c;电脑一开机的时候总是会卡死无法操作&#xff0c;然后就变成蓝屏了。那么遇到这个问题怎么去进行系统的重新安装呢&#xff1f;一起来看看重装系统的具体操作…

中国电子学会2021年06月份青少年软件编程Python等级考试试卷一级真题(含答案)

青少年软件编程&#xff08;Python&#xff09;等级考试试卷&#xff08;一级&#xff09; 分数&#xff1a;100.00 题数&#xff1a;37 一、单选题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 1. 下列程序运行的结果是&#xff1f;&am…

python 环境安装

时隔 将近一年了&#xff0c; 我又重新追寻我的理想了。 趁着2023年刚到&#xff0c;先写一点 python 打个基础。 还是老样子&#xff0c;学到及输出&#xff0c;所以继续写文章。 本文章主要介绍 python 的环境搭建 和 输出 HelloWorld 用于测试搭试好的环境。 本专栏主要…

【ArcGIS微课1000例】0062:标准样式世界地图制作方法

本文基于世界行政区轮廓矢量数据,讲解标准地图的样式(形状)的世界矢量图制作方法。 文章目录 一、加载世界数据二、修改地图投影三、地图布局整饰一、加载世界数据 首先我们将世界行政数据(配套实验数据包中的0062.rar)加载到ArcMap,我们可以看到地图形状接近于矩形形状…

在线 OJ 项目(三) · 处理项目异常 · UUID · 校验代码的安全性 · 阶段性总结

一、处理异常二、区分不同请求的工作目录UUID对 Task 类进行重构三、校验代码的安全性四、阶段性总结书接上回&#xff0c;我们自己测试没问题&#xff0c;是因为使用了正常数据&#xff1b;万一用户输入的是非法的请求&#xff0c;该咋办&#xff1f; 我们需要处理异常请求&a…

内网服务器结合vxlan和iptables-snat实现内网服务器上网——筑梦之路

之前通过其他方式实现 CentOS搭建NAT和DHCP服务&#xff0c;实现共享上网_筑梦之路的博客-CSDN博客_vsphere 创建dhcp CentOS 7 firewalld实现共享上网和搭建本地yum仓库——筑梦之路_筑梦之路的博客-CSDN博客 如上图&#xff0c;有这样一种场景&#xff0c;我们经常遇到&…

【以音视频开发进阶指南为基础】音视频基础概念

一、数字音频 数字音频可以粗糙的理解为将本质是模拟信号的声音音频数字化&#xff0c;那么如何数字化呢&#xff0c;需要经过三个步骤&#xff1a;采样、量化和编码。 采样&#xff1a;将声音的振动信息转化为电信号&#xff0c;再对电信号进行放大处理得到声音的模拟信号&a…

POE交换机常见问题解答

POE交换机通过网线供电的方式为标准的POE终端设备供电&#xff0c;可以免去额外的电源布线&#xff0c;在为一些基于IP的终端&#xff08;如IP电话机、无线局域网接入点AP、网络摄像机等&#xff09;传输数据信号的同时&#xff0c;还能为此类设备提供直流供电的技术。POE技术能…

Windows10安装java环境

Windows10安装java环境 文章目录Windows10安装java环境下载解压配置下载 Java8 https://www.oracle.com/java/technologies/downloads/#java8-windows Java11 https://www.oracle.com/java/technologies/downloads/#java11-windows Java17 https://www.oracle.com/java/techno…

12.日期与时间

目录 一.Date类 1.1 什么是Date类 1.2 Date类的构造器和常用方法 1.2.1 常用构造器 1.2.2 常用方法 二.SimpleDateFormat 2.1 什么是SimpleDateFormat 2.2 SimpleDateFormat的作用 2.3 SimpleDateFormat的构造器和方法 2.3.1 构造器 2.3.2 方法 2.3.3 例子 2.4 Sim…

[论文笔记] XRP: In-Kernel Storage Functions with eBPF

XRP: In-Kernel Storage Functions with eBPF XRP: 利用 eBPF 的核内存储函数 [Paper] [Slides] [Code] OSDI’22 摘要 提出了 XRP, 一个允许应用程序从 NVMe 驱动程序中的 eBPF 钩子(hook)执行用户定义的存储函数(例如索引查找或聚合)的框架, 可以安全地绕过大部分内核的存…

中国电子学会2022年09月份青少年软件编程Python等级考试试卷一级真题(含答案)

分数&#xff1a;100 题数&#xff1a;37 测试时长&#xff1a;60min 一、单选题(共25题&#xff0c;共50分) 1.表达式len("学史明理增信 &#xff0c;读史终生受益") > len(" reading history will benefit you ")的结果是&#xff1f;&#xff08;…

vue3全局组件自动注册

前言&#xff1a;本文主要讲述vue3的全局公共组件的自动注册第一步&#xff1a;建文件需要在src/components 下创建一个文件夹用于存放封装的公共组件&#xff08;这里我起名叫coms&#xff09;需要在src/components 下创建一个js文件用于存放引入组件并注册&#xff08;这里我…

前端经典面试500题【下】

面试 一、vue 说说vue动态权限绑定渲染列表&#xff08;权限列表渲染&#xff09; 首先请求服务器,获取当前用户的权限数据,比如请求 this.$http.get(“rights/list”); 获取到权限数据之后,在列表中使用v-if v-if-else的组合来展示不同的内容 <template><div>&…