Spring-07

spring定义类的作用域

     

在Java中,可以使用关键字"spring"来定义一个类的作用域。

当使用"spring"关键字定义一个类时,该类将被标记为一个Spring Bean,表示该类可以被Spring容器管理和实例化。

Spring框架提供了依赖注入、面向切面编程等功能,将类定义为Spring Bean后,可以使用Spring框架的功能来对这些类进行管理和操作。

通过在类定义上加上"@Component"、"@Service"、"@Repository"等注解,可以将该类定义为Spring Bean并指定其作用域。

Spring框架中常用的类作用域有以下几种:

  1. Singleton(默认):每个Spring容器中只有一个该类的实例。
  2. Prototype:每次从Spring容器中获取该类的实例时都会创建一个新的实例。
  3. Request:每个请求都会创建一个新的实例,并在请求完成后销毁。
  4. Session:每个会话都会创建一个新的实例,并在会话结束后销毁。
  5. Global Session:类似于Session作用域,但适用于分布式环境下的会话。

可以通过在类定义上使用"@Scope"注解来指定类的作用域,例如:

@Component
@Scope("singleton")
public class MySingletonBean {//类的实现...
}

在Spring容器中使用该类时,可以通过依赖注入的方式来获取该类的实例,例如:

@Autowired
private MySingletonBean mySingletonBean;

Spring 支持的几种 bean 的作用域

    

Spring 支持以下几种 bean 的作用域:

  1. Singleton(默认):在整个应用中只创建一个实例,并在整个应用的生命周期中共享该实例。

  2. Prototype:每次请求都会创建一个新的实例。

  3. Request:在每个 HTTP 请求中创建一个新的实例,并在整个请求处理过程中共享该实例。

  4. Session:在每个 HTTP 会话中创建一个新的实例,并在整个会话期间共享该实例。

  5. Global Session:在整个应用的全局 HTTP 会话中创建一个新的实例,并在整个全局会话期间共享该实例。

  6. Application:在 Servlet 上下文中创建一个新的实例,并在整个 Servlet 上下文的生命周期中共享该实例。

  7. WebSocket:在 WebSocket 连接中创建一个新的实例,并在整个 WebSocket 连接的生命周期中共享该实例。

Spring 框架中的单例 bean 是线程安全的吗

     

Spring 框架中的单例 bean 是线程安全的。

Spring 默认将单例 bean 定义为线程安全的。当多个线程同时访问该单例 bean 时,Spring 会保证每个线程具有自己的实例变量,从而避免了线程间的冲突。

这是因为 Spring IoC 容器是单例的,所有的单例 bean 都是通过容器进行管理的。当容器创建一个单例 bean 实例时,它会使用 synchronized 关键字来确保在同一时间只有一个线程访问该实例。

另外,Spring 还提供了一些方式来确保单例 bean 的线程安全性,如使用 synchronized 关键字、使用 ReentrantLock 或使用 ThreadLocal 来保护实例变量等。

Spring 框架中 bean 的生命周期

  1. 实例化:当 Spring 容器启动时,它会根据配置文件或注解信息创建 bean 的实例。

  2. 设置属性:在实例化后,Spring 容器会将配置文件或注解中的属性值注入到 bean 的实例中。

  3. 调用初始化方法:在属性设置完成后,Spring 容器会调用实例中的初始化方法,可以是自定义的初始化方法,也可以是实现了 InitializingBean 接口的 afterPropertiesSet() 方法。

  4. 使用:bean 已经初始化完成后,可以被其他对象使用。

  5. 销毁:当 Spring 容器关闭时,会调用 bean 实例中的销毁方法,可以是自定义的销毁方法,也可以是实现了 DisposableBean 接口的 destroy() 方法。

注意:在使用注解配置的情况下,可以使用 @PostConstruct 和 @PreDestroy 注解来替代自定义的初始化和销毁方法。

在整个生命周期中,Spring 容器负责管理 bean 的创建、属性注入、初始化和销毁,开发人员只需要关注具体的业务逻辑。

总结 

     

Spring Bean的作用域和生命周期是在Spring容器管理的Bean对象中非常重要的概念。下面是对它们的总结:

作用域:

  1. 单例(Singleton):每个Spring容器中只存在一个Bean实例,默认作用域。
  2. 原型(Prototype):每次从容器中获取Bean时,都会创建一个新的实例。
  3. 请求(Request):每次HTTP请求都会创建一个新的Bean实例,适用于Web应用。
  4. 会话(Session):每个HTTP会话都会创建一个新的Bean实例,适用于Web应用。
  5. 全局会话(GlobalSession):用于局域网集群环境下,创建一个全局共享的Bean实例。

生命周期:

  1. 实例化:当Spring容器创建Bean定义时,会实例化Bean对象。
  2. 属性注入:容器会自动为Bean对象注入属性值。
  3. 初始化:通过指定的初始化方法对Bean进行初始化,可以自定义初始化逻辑。
  4. 使用中:Bean对象可以被使用。
  5. 销毁:容器在销毁时会调用Bean的销毁方法,可以自定义销毁逻辑。

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

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

相关文章

前端技术(说明篇)

Introduction ##编写内容:1.前端概念梳理 2.前端技术种类 3.前端学习方式 ##编写人:贾雯爽 ##最后更新时间:2024/07/01 Overview 最近在广州粤嵌进行实习,项目名称是”基于Node实现多人聊天室“,主要内容是对前端界…

springboot图书馆座位预约系统-计算机毕业设计源码85670

目 录 摘要 1 绪论 1.1 选题背景与意义 1.2开发现状 1.3论文结构与章节安排 2 开发环境及相关技术介绍 2.1 MySQL数据库 2.2 Tomcat服务器 2.3 Java语言 2.4 SpringBoot框架介绍 3 图书馆座位预约系统系统分析 3.1 可行性分析 3.1.1 技术可行性分析 3.1.2 经济可…

【Qt】初识QtQt Creator

一.简述Qt 1.什么是Qt Qt 是⼀个 跨平台的 C 图形⽤⼾界⾯应⽤程序框架 。它为应⽤程序开发者提供了建⽴艺术级图形界⾯所需的所有功能。它是完全⾯向对象的,很容易扩展。Qt 为开发者提供了⼀种基于组件的开发模式,开发者可以通过简单的拖拽和组合来实现…

基于ESP32 IDF的WebServer实现以及OTA固件升级实现记录(三)

经过前面两篇的前序铺垫,对webserver以及restful api架构有了大体了解后本篇描述下最终的ota实现的代码以及调试中遇到的诡异bug。 eps32的实际ota实现过程其实esp32官方都已经基本实现好了,我们要做到无非就是把要升级的固件搬运到对应ota flash分区里面…

2.3 主程序和外部IO交互 (文件映射方式)----IO Server实现

2.3 主程序和外部IO交互 (文件映射方式)----IO Server C实现 效果显示 1 内存共享概念 基本原理:以页面为单位,将一个普通文件映射到内存中,达到共享内存和节约内存的目的,通常在需要对文件进行频繁读写时…

手写一个类似@RequestParam的注解(用来接收请求体的参数)

一、本文解决的痛点 按照大众认为的开发规范,一般post类型的请求参数应该传在请求body里面。但是我们有些post接口只需要传入一个字段,我们接受这种参数就得像下面这样单独创建一个类,类中再添加要传入的基本类型字段,配合Reques…

LLM指令微调Prompt的最佳实践(二):Prompt迭代优化

文章目录 1. 前言2. Prompt定义3. 迭代优化——以产品说明书举例3.1 产品说明书3.2 初始Prompt3.3 优化1: 添加长度限制3.4 优化2: 细节纠错3.5 优化3: 添加表格 4. 总结5. 参考 1. 前言 前情提要: 《LLM指令微调Prompt的最佳实践(一)&#…

nexus未开启匿名访问Anonymous Access,访问maven元数据maven-metadata,报401未授权Unauthorized错误

一、背景 下午在调试nexus的时候,其他同事不小心把匿名访问停用了,导致客户端android打包的时候,报错: Received status code 401 from server: Unauthorized。 访问http://192.168.xx.xx:8081/repository/public/com/xxx/xxxcor…

【软件测试】单元测试、系统测试、集成测试详解

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、单元测试的概念 单元测试是对软件基本组成单元进行的测试,如函数或一个类的方法…

PCL 点云最小图割(前景、背景点云提取)

点云最小图割 一、概述1.1 概念1.2 算法原理二、代码示例三、运行结果🙋 结果预览 一、概述 1.1 概念 最小图割算法(pcl::MinCutSegmentation):是一种基于图论的对象分割方法,主要用于点云数据的处理和分析。该算法将点云数据表示为一个图结构,其中点云中的点作为图的节…

【Java】微博系统设计:怎么应对热点事件的突发访问压力?

一、问题解析 微博(microblog)是一种允许用户即时更新简短文本(比如140个字符),并可以公开发布的微型博客形式。今天我们就来开发一个面向全球用户、可以支持10亿级用户体量的微博系统,系统名称为“Weitte…

不同系统间数据交换要通过 api 不能直接数据库访问

很多大数据开发提供数据给外部系统直接给表结构,这是不好的方式。在不同系统间进行数据交换时,通过API(应用程序编程接口)而非直接访问数据库是现代系统集成的一种最佳实践。 目录 为什么要通过API进行数据交换如何通过API进行数据…

UG NX二次开发(C#)-根据草图创建拉伸特征(UFun+NXOpen)

文章目录 1、前言2、在UG NX中创建草图,然后创建拉伸特征3、基于UFun函数的实现4、基于NXOpen的实现代码1、前言 UG NX是基于特征的三维建模软件,其中拉伸特征是一个很重要的特征,有读者问如何根据草图创建拉伸特征,我在这篇博客中讲述一下草图创建拉伸特征的UG NX二次开发…

分布式链路追踪Micrometer Tracing和ZipKin基础入门与实践

【1】概述 在分布式与微服务场景下,我们需要解决如下问题: 在大规模分布式与微服务集群下,如何实时观测系统的整体调用链路情况。 在大规模分布式与微服务集群下,如何快速发现并定位到问题。 在大规模分布式与微服务集群下&…

AI网络爬虫006:从当当网批量获取图书信息

文章目录 一、目标二、输入内容三、输出内容一、目标 用户输入一个图书名称,然后程序自动从当当网批量获取图书信息 查看相关元素在源代码中的位置: 二、输入内容 第一步:在deepseek中输入提示词: 你是一个Python爬虫专家,一步步的思考,完成以下网页爬取的Python脚本任…

法制史学习笔记(个人向) Part.3

5. 三国两晋南北朝法律制度 以下为三国魏晋南北朝直到唐代的历史发展脉络图: #mermaid-svg-6AVVMjllKTBaBbRO {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-6AVVMjllKTBaBbRO .error-icon{fill:#55222…

【Python实战因果推断】14_线性回归的不合理效果4

目录 Debiasing Step Denoising Step Standard Error of the Regression Estimator Debiasing Step 回想一下,最初由于混杂偏差,您的数据看起来是这样的、 随着信贷额度的增加,违约率呈下降趋势: 根据 FWL 定理,您可…

c文件读写

格式输入输出 文件指针 FILE *pf 文件打开 fopen("文件名",打开方式)  文件名:普通字符串 打开方式:读、写、文本文件、二进制文件 rt、wt、at、rb、wb、ab、rt、wt、at、rb、wb、ab (r 为读,w 为写, 为读写&…

解锁机器学习潜力的钥匙:深度剖析交叉验证集的应用与魅力

一、为何需要交叉验证集 在构建机器学习模型时,我们通常会面临一个关键问题:如何确保模型在新数据上的表现与在训练数据上一样出色?这涉及到模型的泛化能力——即模型对未见过的数据做出准确预测的能力。传统的训练集/测试集划分方法虽然简单…