【Spring框架学习3】Spring Bean的作用域 及 生命周期

news2024/9/23 21:21:26

一、Spring Bean的作用域有哪些?

Spring框架支持以下五种Bean的作用域:

  • Singleton:这是默认的作用域,在每个Spring IoC容器中只有一个Bean的实例(IoC初始化后)。Spring 中的 bean 默认都是单例的,是对单例设计模式的应用。
  • Prototype:每次 getBean() 都会创建一个新的Bean实例。
  • Request:每次HTTP请求都会产生一个新的Bean(请求Bean)。在当前的HTTP 请求内有效
  • Session:每一次来自新 session 的 HTTP 请求都会产生一个新的 bean(会话 Bean),在当前的 HTTP session 内有效。
  • Global Session/application:每个 Web 应用在启动时创建一个 Bean(应用 Bean),该 bean 仅在当前应用启动时间内有效。

问题1:

Spring框架默认的作用域为Singleton,是说在每个Spring IoC容器中只有一个Bean的实例,但是为啥在Prototype作用域下每次请求都会创建一个新的Bean实例呢,这个不冲突吗

不冲突。在Spring框架中,Singleton和Prototype作用域的定义是不同的。

Singleton作用域是默认的作用域,当没有明确指定Bean的作用域时,Spring会为这个Bean创建一个Singleton作用域的实例。这意味着在同一个Spring IoC容器中,只有一个Bean的实例。当你在应用程序中多次获取同一个Singleton Bean时,你实际上是在访问同一个Bean实例。

而Prototype作用域是另一种类型的作用域,每次请求都会创建一个新的Bean实例。当你在应用程序中多次获取同一个Prototype Bean时,每次都会创建一个新的实例。这种作用域适用于那些需要经常创建新实例的Bean,例如,每次用户请求都需要一个新的实例。

因此,虽然Singleton和Prototype作用域在名称上看起来相似,但它们在实际应用中的行为是不同的。Singleton作用域适用于那些只需要一个实例的Bean,而Prototype作用域适用于那些每次请求都需要新实例的Bean。这就是为什么在Prototype作用域下每次请求都会创建一个新的Bean实例,这与Singleton作用域并不冲突。

问题2:那在程序中如何指定Bean的作用域呢

指定Bean的作用域的方式(和声明一个类为Bean的方式一样),有两种,具体如下:

  • 方式1:在ApplicationContext.xml文件中的< bean >元素中添加scope属性

在Spring框架中,你可以通过在Bean的配置中指定作用域来改变Bean实例化的行为。具体来说,你可以在Bean的配置中使用scope属性来指定作用域。

xml
<bean id="exampleBean" class="examples.ExampleBean" scope="singleton"/>

在上面的例子中,scope属性的值为singleton,表示这个Bean的作用域是Singleton。

  • 方式2:注解的方式,通过@Scope注解

如果你使用注解配置Bean,你可以在@Component或@Bean注解中使用scope属性,如下所示:

java

@Component  
@Scope("singleton")  
public class ExampleBean {  
    // ...  
}

二、Spring Bean的生命周期

Spring Bean的生命周期可以包括以下阶段:
实例化-》属性赋值-》自定义初始化-》使用-》自定义销毁-》销毁

  • 实例化:当Spring容器启动时首先会进行Bean的实例化,会根据配置文件或注解等方式创建Bean的实例(默认情况下Spring Bean的作用域为Singleton,实例化后IOC容器中有唯一的Bean实例)。
  • 属性赋值:在实例化后,Spring会自动为Bean的属性进行注入,可以通过配置文件或注解等方式进行属性注入。
  • 自定义初始化:在属性注入完成后,Bean会调用自定义的初始化方法进行一些额外的初始化操作,可以通过实现InitializingBean接口(初始化bean接口)或使用@PostConstruct注解定义方法。
  • 使用:当所有Bean都初始化完成后,就可以通过Spring容器获取Bean实例并进行使用了。
  • 自定义销毁:在使用完后,可以定义自定义的销毁方法,通过实现DisposableBean接口使用@PreDestroy注解定义方法。
  • 销毁:当Bean不再需要使用时,会被销毁,释放占用的资源。

总之,Spring Bean的生命周期包括了实例化、属性赋值、自定义初始化、使用、自定义销毁和销毁等阶段,这些阶段可以通过实现接口或使用注解等方式进行自定义操作,使应用程序更加灵活和易于维护。
在这里插入图片描述

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

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

相关文章

捕捉回忆的时光机:用AI智能管理的NAS,提升整理效率

记忆会模糊&#xff0c;但照片不会&#xff0c;每次打开照片的时候背后的故事就会浮现在我们眼前。当然&#xff0c;我们现在的设备也越来越多了&#xff0c;当我们要找某一张照片时总是需要从散落在各个设备里的照片库寻找&#xff0c;花费大量时间。而Terra Photos的出现&…

剑指offer——JZ37 序列化二叉树 解题思路与具体代码【C++】

一、题目描述与要求 序列化二叉树_牛客题霸_牛客网 (nowcoder.com) 题目描述 请实现两个函数&#xff0c;分别用来序列化和反序列化二叉树&#xff0c;不对序列化之后的字符串进行约束&#xff0c;但要求能够根据序列化之后的字符串重新构造出一棵与原二叉树相同的树。 二叉…

apple pencil有没有必要买?口碑好的电容笔推荐

相信很多小伙伴都在纠结&#xff0c;该选哪一支电容笔呢&#xff1f;一款原装的Apple Pencil&#xff0c;售价接近1000元&#xff0c;这个价位&#xff0c;在许多人的眼中&#xff0c;已经是相当的高了。其实&#xff0c;平替电容笔的价格很低&#xff0c;一两百块钱就能买到&a…

C/C++: * 和 *的区别

/** * * Althor:Hacker Hao * Create:2023.10.11 * */#include <bits/stdc.h> using namespace std; void fun1(int* ptr) {*ptr 3;ptr NULL; //不会改变原指针所指向的对象 }void fun2(int*& ptr) {*ptr 2;ptr NULL; //会改变原指针所指向的对象//也就…

2023年9月国产数据库大事记-墨天轮

本文为墨天轮社区整理的2023年9月国产数据库大事件和重要产品发布消息。 目录 9月国产数据库大事记 TOP109月国产数据库大事记&#xff08;时间线&#xff09;产品/版本发布兼容认证代表厂商大事记排行榜新增数据库厂商活动相关资料 9月国产数据库大事记 TOP10 9月国产数据库…

第十一章 共用体union和枚举enum

共用体 概念 有时想用同一段内存单元存放不同类型的变量。例如&#xff0c;把一个短整型变量&#xff0c;一个字符型变量和一个实型变量放在同一个地址开始的内存单元中 1000地址。以上3个变量在内存中占的字节数不同&#xff0c;但都从同一地址开始(图中设地址为1000)存放&a…

推荐高效的电脑磁盘备份解决方案!

该怎样实现电脑磁盘备份&#xff1f; 接下来&#xff0c;我们将为你介绍两种磁盘备份方法。一种是利用操作系统自带的功能&#xff0c;另一种则是通过第三方工具实现。 方法一. Windows自带的备份还原功能 要在Windows 11/10/8/7中备份软件&#xff0c;你可以使…

Linux shell编程学习笔记10:expr命令 和 算术运算

Linux Shell 脚本编程和其他编程语言一样&#xff0c;支持算数、关系、布尔、字符串、文件测试等多种运算。上节我们研究了 Linux shell编程 中的 字符串运算&#xff0c;今天我们研究 Linux shell编程的算术运算 &#xff0c;为了方便举例&#xff0c;我们同时对expr命令进行…

物联网AI MicroPython传感器学习 之 Relay继电器模块

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; 一、产品简介 继电器&#xff08;英文名称&#xff1a;relay&#xff09;是一种电控制器件&#xff0c;是当输入量的变化达到规定要求时&#xff0c;在电气输出电路中使被控量发生预定的阶跃变化的一种电器。…

linux查看文件内容命令more/less/cat/head/tail/grep

1.浏览全部内容more/less 文件&#xff1a; more&#xff1a;可以查看文件第一屏的内容&#xff0c;同时左下角有一个显示内容占全部文件内容的百分比&#xff0c;空格键会显示下一屏的内容&#xff0c;直到文件末尾 [rootmaster data]# more file1less&#xff1a;相较于mor…

前端工程化(editorconfig+ESLint+Prettier+StyleLint+Husky、Commitlint)

前言 致谢&#xff1a;有来技术大大 通过学习有来技术大大的文章和结合自己的实践&#xff0c;写一篇笔记记录一下 所使用的工具&#xff1a; ide项目风格(editorconfig)代码检查(ESLint)代码风格(Prettier)样式风格(StyleLint)git提交规范(Husky、Commitlint) 一、ide项目…

【算法设计与分析】— —单源最短路径的贪心算法

&#x1f383;欢迎大家前去观看我的算法设计与分析专栏&#xff1a; 算法设计与分析_IT闫的博客-CSDN博客 希望对大家有所帮助&#xff01; &#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java…

玉柴集团用USB Server对U盾远程安全管控

在当今数字化时代&#xff0c;企业的业务规模和组织结构日益复杂&#xff0c;对于U盾这样小小的&#xff0c;但却异常重要的USB设备的管理和使用提出了更高的要求。广西玉柴机器股份有限公司作为一家综合性集团企业&#xff0c;其业务规模庞大&#xff0c;组织结构复杂&#xf…

MapReduce(林子雨慕课课程)

文章目录 7. MapReduce7.1 MapReduce简介7.1.1 分布式并行编程7.1.2 MapReduce模型简介 7.2 MapReduce体系结构7.3 MapReduce工作流程概述7.4 Shuffle过程原理7.5 MapReduce应用程序的执行过程7.6 WordCount实例分析7.7 MapReduce的具体应用7.8 MaReduce编程实践 7. MapReduce …

案例研究|DataEase助力无锡布勒业务数据可视化建设

布勒集团是一家来自瑞士的家族企业&#xff0c;在谷物与食品以及先进材料制造等领域深耕超过160年。布勒大中华区的总部位于江苏无锡。无锡布勒是一家集研发、生产、销售于一体的综合性公司&#xff0c;拥有先进的生产设备及高素质的科技研发人员&#xff0c;以谷物深加工、谷物…

代码随想录第41天 | 123.买卖股票的最佳时机III ● 188.买卖股票的最佳时机IV

123.买卖股票的最佳时机III /*** param {number[]} prices* return {number}*/ var maxProfit function (prices) {const len prices.lengthconst dp new Array(len).fill(0).map(x > new Array(5).fill(0));// 第一天买入&#xff08;第一次买入&#xff09;dp[0][1] …

c 语言基础题目:PTA L1-033 出生年

以上是新浪微博中一奇葩贴&#xff1a;“我出生于1988年&#xff0c;直到25岁才遇到4个数字都不相同的年份。”也就是说&#xff0c;直到2013年才达到“4个数字都不相同”的要求。本题请你根据要求&#xff0c;自动填充“我出生于y年&#xff0c;直到x岁才遇到n个数字都不相同的…

Jetson Orin NX 开发指南(2): 基本环境配置

本文主要是在 Jetson Orin NX 系统烧录和组件安装完成后&#xff0c;对系统进行一些基本的配置&#xff0c;需要注意的是这里的系统其实也是 ubuntu 系统&#xff0c;并且由于选择的是 &#xff0c;其对应的是 ubuntu 20.04 系统&#xff0c;接下来我将介绍一些基本的配置。 一…

【动态规划】是泰波那契数,不是斐波那契数

Problem: 1137. 第 N 个泰波那契数 文章目录 题目解读解题方法dp动态规划迭代优化✔ 复杂度Code 题目解读 首先我们来解读一下本题的意思&#x1f50d; 相信读者在看到【泰波那契数】的时候&#xff0c;不禁会联想到【斐波那契数】&#xff0c;它们呢是一对孪生兄弟&#xff0c…

【d2l动手学深度学习】 Lesson 10 多层感知机 + 代码实现 试验结果对比

文章目录 1. 介绍2. 单层Softmax回归2.1 手写Softmax训练效果 2.2 调用pytorch内置的softmax回归层实现调用pytorch内置softmax实验结果总结 3. 一层感知机&#xff08;MLP&#xff09; Softmax实验结果 Reference写在最后 1. 介绍 在第十节课 多层感知机 的代码实现部分&…