《Spring Framework实战》5:Spring Framework 概述

欢迎观看《Spring Framework实战》视频教程

Spring 使创建 Java 企业应用程序变得容易。它为您提供一切 需要在企业环境中采用 Java 语言,并支持 Groovy 和 Kotlin 作为 JVM 上的替代语言,并且可以灵活地创建许多 类型的架构。从 Spring Framework 6.0 开始, Spring 需要 Java 17+。

Spring 支持广泛的应用程序场景。在大型企业中,应用程序 通常存在很长时间,并且必须在升级后的 JDK 和应用程序服务器上运行 cycle 超出了开发人员的控制范围。其他 API 可能作为嵌入了服务器的单个 jar 运行, 可能在云环境中。而其他应用程序可能是独立的应用程序(例如 batch 或集成工作负载)的 Ev Mc.

Spring 是开源的。它有一个庞大而活跃的社区,提供持续的反馈 基于各种实际用例。这帮助 Spring 成功了 在很长一段时间内演变。

    1. 我们所说的 “Spring” 是什么意思

术语 “Spring” 在不同的上下文中意味着不同的事物。它可以用来指代 Spring Framework 项目本身,这是一切开始的地方。随着时间的推移,其他 Spring 项目已经构建在 Spring 框架之上。大多数情况下,当人们说 “Spring”,他们指的是整个项目系列。本参考文档重点介绍 基础:Spring Framework 本身。

Spring Framework 分为多个模块。应用程序可以选择他们需要的模块。 核心是核心容器的模块,包括配置模型和依赖注入机制。除此之外,Spring 框架还提供了基础 支持不同的应用程序架构,包括消息传递、事务数据和 持久性和 Web 的 Web 共享。它还包括基于 Servlet 的 Spring MVC Web 框架,并且在 parallel,Spring WebFlux 反应式 Web 框架。

关于模块的说明:Spring Framework 的 jar 允许部署到模块路径(Java 模块系统)。为了在启用模块的应用程序中使用,Spring 框架 jar 带有定义稳定语言级模块名称的清单条目 (、 等)独立于 jar 工件名称。罐子紧随其后 相同的命名模式,例如 instead 而不是 – 和 . 当然,Spring Framework 的 jar 在 Classpath 上也能正常工作。Automatic-Module-Namespring.corespring.context-.spring-corespring-context

    1. Spring 和 Spring 框架的历史

Spring 于 2003 年问世,作为对早期 J2EE 规范复杂性的回应。 虽然有些人认为 Java EE 及其现代继任者 Jakarta EE 位于 与 Spring 的竞争,它们实际上是互补的。Spring 编程 模型不包含 Jakarta EE 平台规范;相反,它集成了 从传统的 EE 伞中精心挑选的单个规格:

  1. Servlet API (JSR 340)
  2. WebSocket API (JSR 356)
  3. 并发实用程序 (JSR 236)
  4. JSON 绑定 API (JSR 367))
  5. Bean 验证 (JSR 303)
  6. JPA (JSR 338)
  7. JMS (JSR 914)
  8. 以及用于事务协调的 JTA/JCA 设置(如有必要)。

Spring Framework 还支持依赖注入 (JSR 330) 和通用注释 (JSR 250) 规范,哪个应用程序 开发人员可以选择使用提供的特定于 Spring 的机制 由 Spring 框架。最初,这些是基于通用包的。javax

从 Spring Framework 6.0 开始,Spring 已升级到 Jakarta EE 9 级别 (例如,Servlet 5.0+、JPA 3.0+),基于名称空间而不是 传统软件包。以 EE 9 为最低版本并且已经支持 EE 10, Spring 已准备好为 Jakarta EE API 的调用。Spring Framework 6.0 与 Tomcat 10.1 完全兼容, Jetty 11 和 Undertow 2.3 作为 Web 服务器,以及 Hibernate ORM 6.1。jakartajavax

随着时间的推移,Java/Jakarta EE 在应用程序开发中的作用发生了变化。在 在 J2EE 和 Spring 的早期,创建应用程序是为了部署到应用程序 服务器。今天,在 Spring Boot 的帮助下,应用程序是在 devops 和 云友好的方式,嵌入了 Servlet 容器,并且很容易更改。截至 Spring Framework 5 是一个 WebFlux 应用程序,甚至不直接使用 Servlet API 并且可以在非 Servlet 容器的服务器(例如 Netty)上运行。

Spring 不断创新和发展。除了 Spring 框架之外,还有其他 项目,例如 Spring Boot、Spring Security、Spring Data、Spring Cloud、Spring Batch、 等等。请务必记住,每个项目都有自己的源代码存储库 Issue Tracker 和 Release Cadence 的 Cadence 进行更新。请参阅 spring.io/projects Spring 项目的完整列表。

    1. 设计理念

当您了解框架时,不仅要知道它做什么,还要知道它做什么 它遵循的原则。以下是 Spring 框架的指导原则:

  1. 在每个级别提供选择。Spring 允许您尽可能晚地推迟设计决策。 例如,您可以通过配置切换持久性提供程序,而无需更改 您的代码。许多其他基础设施问题以及与 第三方 API。
  2. 容纳不同的观点。Spring 拥抱灵活性,不固执己见 关于应该如何做事。它支持广泛的应用需求 不同的观点。
  3. 保持强大的向后兼容性。Spring 的演变得到了精心管理 强制在版本之间进行少量的重大更改。Spring 支持精心挑选的范围 JDK 版本和第三方库,以方便维护应用程序和 依赖于 Spring 的库。
  4. 关心 API 设计。Spring 团队在制作 API 上投入了大量的思考和时间 它们很直观,并且在许多版本和多年中都适用。
  5. 为代码质量设定高标准。Spring Framework 非常强调 有意义、最新且准确的 Javadoc。这是极少数可以声称的项目之一 干净的代码结构,包之间没有循环依赖关系。

    1. 反馈和贡献

对于操作方法问题或诊断或调试问题,我们建议使用 Stack Overflow。单击此处查看可在 Stack Overflow 上使用的建议标签列表。如果你相当确定 Spring Framework 中存在问题或想建议某个功能,请使用 GitHub 问题。

如果您有解决方案或建议的修复方法,可以在 Github 上提交拉取请求。但是,请记住 对于除最琐碎的问题之外的所有问题,我们期望在该问题中提交一个工单 跟踪器,在这里进行讨论并留下记录以供将来参考。

有关更多详细信息,请参阅 CONTRIBUTING、 顶层项目页面。

    1. 开始

如果您刚刚开始使用 Spring,则可能需要开始使用 Spring 框架,通过创建基于 Spring Boot 的 应用。Spring Boot 提供了一种快速(且固执己见)的方法来创建一个 生产就绪的基于 Spring 的应用程序。它基于 Spring 框架,偏爱 约定优于配置,旨在让您快速启动并运行 尽可能。

您可以使用 start.spring.io 生成基本项目或遵循 “入门”指南之一,例如开始构建 RESTful Web 服务。 除了更容易消化之外,这些指南还非常注重任务,而且大多数 基于 Spring Boot。它们还涵盖了 Spring 产品组合中的其他项目,这些项目 在解决特定问题时,您可能需要考虑。

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

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

相关文章

解决npm报错:sill idealTree buildDeps

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 报错信息 使用 npm 安装依赖时报错:sill idealTree buildDeps 解决方案 请按照以下步骤进行相关操作: 1、删除 C:\Users{账户}\ 文件夹中的 .npm…

【什么是MVCC?】

MVCC(Multi - Version Concurrency Control)即多版本并发控制。 一、背景和概念 在数据库系统中,并发控制是非常重要的。当多个事务同时访问和修改数据时,需要一种机制来确保数据的一致性和正确性。MVCC 是一种并发控制的技术&a…

递归构建树菜单节点

一、获取所有分类上下级信息 /*** 获取所有分类上下级信息*/ public R<List<ResearchTypeTreeVO>> getTypeTreeList(){//获取所有分类数据List<ResearchTypeVO> list ibResearchTypeService.getSuperList(null);List<ResearchTypeTreeVO> researchTy…

PHP语言的正则表达式

PHP语言中的正则表达式详解 引言 在编程中&#xff0c;字符串处理是一个非常常见的问题&#xff0c;而正则表达式&#xff08;Regular Expressions&#xff0c;简称Regex&#xff09;则是高效处理字符串的强大工具。PHP作为一种广泛应用的服务器端编程语言&#xff0c;也提供…

键盘过滤驱动

概述 irp请求会从io管理器中传递到设备栈中依次向下发送&#xff0c;当到达底层真实设备处理完成后&#xff0c;会依次返回&#xff0c;这时如果在设备栈中有我们自己注册的设备&#xff0c;就可以起到一个过滤的功能。键盘过滤驱动就是如此&#xff0c;通过附加到原本存在的设…

Ubuntu上安装Apache Spark

在Ubuntu上安装Apache Spark的步骤如下&#xff1a; 1. 安装Java Spark是用Scala编写的&#xff0c;并且依赖Java。因此&#xff0c;首先需要安装Java。 安装OpenJDK 8&#xff08;或更高版本&#xff09; 执行以下命令安装OpenJDK&#xff1a; sudo apt update sudo apt …

formik 的使用

礼记有言&#xff1a;独学而无友&#xff0c;则孤陋而寡闻 让我们一起了解更多便捷方法&#xff0c;缩短开发时间去摸鱼&#xff0c;嘿嘿。 框架&#xff1a;react 在写表单的时候&#xff0c;我不太喜欢把验证写的很繁琐&#xff0c;这里讲介绍&#xff0c;验证表单的非常好用…

JVM实战—OOM的生产案例

1.每秒仅上百请求的系统为何会OOM(RPC超时时间设置过长导致QPS翻几倍) (1)案例背景 在这个案例中&#xff0c;一个每秒仅仅只有100请求的系统却因频繁OOM而崩溃。这个OOM问题会涉及&#xff1a;Tomcat底层工作原理、Tomcat内核参数的设置、服务请求超时时间。 (2)系统发生OOM的…

数字IC设计高频面试题

在数字IC设计领域&#xff0c;面试是评估候选人技术能力和问题解决能力的重要环节。数字IC设计的复杂性和要求在不断提高。面试官通常会提出一系列面试题&#xff0c;以考察应聘者在数字设计、验证、时钟管理、功耗优化等方面的专业知识和实践经验。 这些题目不仅涉及理论知识…

Leetcode 3412. Find Mirror Score of a String

Leetcode 3412. Find Mirror Score of a String 1. 解题思路2. 代码实现 题目链接&#xff1a;3412. Find Mirror Score of a String 1. 解题思路 这一题就是一道典型的栈的题目&#xff0c;我们对每一个字符构造一个栈&#xff0c;然后考察每一个元素的mirror元素是否当前存…

测试开发基础知识2

10.什么是等价类和边界值法&#xff1f; 1)等价类划分 等价类划分是将系统的输入域划分为若干部分&#xff0c;然后从每个部分选取少量代表性数据进行测试。等价类划分认为如果一个测试用例在某个等价类中的一个值上通过测试&#xff0c;那么它在这个类中的其他值上也…

PHP在做api开发中,RSA加密签名算法如何使用 ?

RSA 加密是什么 RSA&#xff08;Rivest-Shamir-Adleman&#xff09;是最早的公钥密码系统之一&#xff0c;广泛用于安全数据传输。3 位数学家 Rivest、Shamir 和 Adleman 的名字来命名的。 是非对称加密的一种 这种算法非常可靠&#xff0c;密钥越长&#xff0c;它就越难破解。…

OSI模型的网络层中产生拥塞的主要原因?

&#xff08; 1 &#xff09;缓冲区容量有限&#xff1b;&#xff08; 1.5 分&#xff09; &#xff08; 2 &#xff09;传输线路的带宽有限&#xff1b;&#xff08; 1.5 分&#xff09; &#xff08; 3 &#xff09;网络结点的处理能力有限&#xff1b;&#xff08; 1 分…

用OpenCV实现UVC视频分屏

分屏 OpencvUVC代码验证后话 用OpenCV实现UVC摄像头的视频分屏。 Opencv opencv里有很多视频图像的处理功能。 UVC Usb 视频类&#xff0c;免驱动的。视频流格式有MJPG和YUY2。MJPG是RGB三色通道的。要对三通道进行分屏显示。 代码 import cv2 import numpy as np video …

备战蓝桥杯 链表详解

链表概念 上一次我们用顺序存储实现了线性表&#xff0c;这次我们用链式存储结构实现的线性表就叫链表 链表每个节点包含数据本身和下一个节点和上一个节点的地址 链表的分类 单链表 双链表 带头链表 不带头链表 循环链表等等 我们竞赛一般都用的是带头链表 双向链表的…

DeepSeek:性能强劲的开源模型

deepseek 全新系列模型 DeepSeek-V3 首个版本上线并同步开源。登录官网 chat.deepseek.com 即可与最新版 V3 模型对话。 性能对齐海外领军闭源模型​ DeepSeek-V3 为自研 MoE 模型&#xff0c;671B 参数&#xff0c;激活 37B&#xff0c;在 14.8T token 上进行了预训练。 论…

Redis Zset有序集合

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 Redis Zset有序集合 收录于专栏[redis] 本专栏旨在分享学习Redis的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 概述 普通命令 ZAD…

Python中的可变对象与不可变对象;Python中的六大标准数据类型哪些属于可变对象,哪些属于不可变对象

Python中的可变对象与不可变对象&#xff1b;Python中的六大标准数据类型哪些属于可变对象&#xff0c;哪些属于不可变对象 Python中的可变对象与不可变对象一、Python的六大标准数据类型1. 数字类型 (Number)2. 字符串 (String)3. 列表 (List)4. 元组 (Tuple)5. 集合 (Set)6. …

Node.js JXcore 打包教程

Node.js JXcore 打包教程 介绍 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,它允许开发者使用 JavaScript 编写服务器端和网络应用程序。JXcore 是一个流行的 Node.js 发行版,它支持将 Node.js 应用程序打包成单一的可执行文件,使得部署和分发变得更加容易…

Unity 2d描边基于SpriteRender,高性能的描边解决方案

目标 以Unity默认渲染管线为例&#xff0c;打造不需要图片内边距&#xff0c;描边平滑&#xff0c;高性能的描边解决方案 前言 在2d游戏中经常需要给2d对象添加描边&#xff0c;来突出强调2d对象 当你去网上查找2d描边shader&#xff0c;移植到项目里面&#xff0c;大概率会…