版本:5.1.4.RELEASE

Spring使创建Java企业应用程序变得容易。它提供了在企业环境中使用Java语言所需的一切,支持Groovy和Kotlin(Java是基于JVM的语言,Groovy和Kotlin也是一门基于JVM的语言),并有灵活地根据应用程序的需求创建多种类型的体系架构。

从SpringFramework5.0开始,Spring需要JDK8+(JAVA SE8+),并且已经为JDK9提供了开箱即用的支持。

Spring支持广泛的应用场景。在大型企业中,应用程序通常存在很长时间,必须运行在JDK和应用程序服务器上,其升级周期超出了开发人员的控制。其他的可以作为单个jar运行,并嵌入服务器,可能在云环境中。然而,其他应用程序可能是不需要服务器的独立应用程序(如批处理或集成工作负载)

Spring 是开源的。它有一个庞大而活跃的社区,基于真实的使用场景提供连续的反馈。这有助于Spring在很长一段时间内成功地发展。

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

“Spring”一词在不同的语境中有着不同的含义。它曾经指的是Spring Framework 项目本身。随着时间的推移,Spring的其他子项目已经构建在Spring框架的基础之上。大多数情况下,人们说的Spring,是指的整个Spring 项目家族。当前这个文档主要讲解Spring Framework 本身。

Spring Framework 被分割成了很多模块。应用程序可以选择他们需要的模块。

Spring框架分为多个模块。应用程序可以选择他们需要的模块。核心容器是所有模块的心脏,包括配置模型和依赖注入机制。除此之外,Spring Framework
框架为不同的应用程序体系架构提供基础支持,包括消息传递、事务数据和持久性以及Web。它还包括基于servlet的SpringMVC Web框架,以及并行的SpringWebFlux Reactive(反应式)Web框架。

当然,Spring Framework 可以在JDK 8 和JDK 9 正常工作

1.2 Spring Framework 发展历史

作为对早期J2EE规范复杂性的回应,Spring于2003年诞生。虽然有些人认为JavaEE和Spring处于竞争中,但实际上,Spring与JavaEE是互补的。Spring编程模型不接受JavaEE平台规范,而是集成了来自EE的精心选择的个别规范。

Servlet API (JSR 340–>Java Servlet 3.1规范)

WebSocket API (JSR 356–>用于WebSocket的Java TM API)

Concurrency Utilities (JSR 236–>Java TM EE的并发实用程序)

JSON Binding API (JSR 367–>用于JSON绑定的Java TM API(JSON-B))

Bean Validation (JSR 303–>Bean验证)

JPA (JSR 338–>Java TM Persistence 2.2)

JMS (JSR 914–>Java TM消息服务(JMS)API)

以及必要时用于事务协调的JTA / JCA设置。

Spring Framework 也支持依赖注入(JSR 330)和注解(JSR 250)

应用程序开发人员可以选择使用这些规范,而不是Spring框架提供的特定于Spring的机制。

对于Spring FrameWork 5,Spring需要JavaEE 7 Level(例如servlet 3.1 +,JPA 2.1+)作为最小值,同时在运行时遇到的Java EE 8级(例如servlet 4.0、JSON绑定API)提供开箱即用与新版Apls集成。这使Spring与Tomcat8和9、WebSphere9和JBoss EAP7完全兼容。

随着时间的推移,Java EE在应用程序开发中的作用也在不断发展。 在Java EE和Spring的早期,创建了应用程序以部署到应用程序服务器。 今天,在Spring Boot的帮助下,应用程序以devops和cloud-friendly的方式创建,Servlet容器嵌入并且变得微不足道。 从Spring Framework 5开始,WebFlux应用程序甚至不直接使用Servlet API,并且可以在不是Servlet容器的服务器(例如Netty)上运行。

Spring不断创新,不断超越Spring框架,还有其他项目,如Spring BootSecurity, Spring Data, Spring Cloud, Spring Batch等等。

必须记住,每个项目都有自己的源代码存储库、问题跟踪程序和发布节奏。看 spring.io/projects 项目完整清单的项目。

1.3 设计理念

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

  • 提供各个层面的选择。Spring允许您尽可能晚地推迟设计决策。例如,您可以通过配置切换持久性提供程序,而无需更改代码。许多其他基础架构问题以及与第三方API的集成也是如此。

  • 适应不同的观点。Spring拥抱灵活性,并不认为应该如何做。它以不同的视角支持广泛的应用需求。

  • 保持强大的向后兼容性。Spring的演变经过精心设计,可以在版本之间进行一些重大改变。Spring支持精心挑选的JDK版本和第三方库,以便于维护依赖于Spring的应用程序和库。

  • 关心API设计。Spring团队投入了大量的思考和时间来制作直观的API,并且可以支持多个版本和多年。

  • 为代码质量设定高标准。Spring框架强调有意义的,当前的和准确的javadoc。它是极少数项目之一,可以声称干净的代码结构,包之间没有循环依赖。

1.4 反馈和贡献

对于操作方法问题或诊断或调试问题,我们建议使用StackOverflow,我们有一个问题页面列出了要使用的建议标签如果您非常确定Spring Framework中存在问题或想要建议功能,请使用JIRA问题跟踪器。

如果您有解决方案或建议的修复,您可以在Github上提交拉取请求 。但是,请记住,除了最微不足道的问题之外,我们希望在问题跟踪器中提交一张票据,进行讨论并留下记录以供将来参考。

有关更多详细信息,请参阅“ 贡献 ”顶级项目页面上的指南。

1.5 入门

如果您刚刚开始使用Spring,您可能希望通过创建基于Spring Boot的应用程序来开始使用Spring Framework 。Spring Boot提供了一种快速(和固执己见)的方式来创建一个生产就绪的基于Spring的应用程序。它基于Spring Framework,支持约定优于配置,旨在帮助您尽快启动和运行。

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

1.6 JDK 版本范围

Spring Framework版本 JDK版本
Spring Framework 5.1.x JDK 8-12
Spring Framework 5.0.x JDK 8-10
Spring Framework 4.3.x JDK 6-8

1.7 升级说明

Upgrading to Spring Framework 5.0/5.1

升级到5.1版

JDK 11

Spring Framework 5.1需要JDK 8或更高版本,并且首次特别支持JDK 11(作为下一个长期支持版本)。对于任何面向JDK 11的应用程序,我们强烈建议升级到Spring Framework 5.1,在类路径和模块路径上提供无警告的体验。

请注意,任何旧版本的核心框架都不支持针对JDK 11进行开发。Spring Framework 5.0.9+和4.3.19+仅支持将基于Java 8的应用程序部署到JVM 11运行时环境(使用-target 1.8;参见下文),在启动时接受JVM级警告。

ASM

Spring Framework 5.1使用了为JDK 11/12准备的修补的ASM 7.0 fork及其新的字节码级别,但尚未经过实战测试。Spring Framework 5.1.x将跟踪JDK 12的进一步ASM修订,同时加强与JDK 11的字节码兼容性。

对于防御性升级策略,考虑使用JDK 8作为目标(-target 1.8)编译应用程序代码,只需将其部署到JDK 11.这使得您的字节码更安全,不仅可以解析Spring的类路径扫描,还可以解析其他字节码处理工具。

CGLIB

Spring Framework 5.1使用修补的CGLIB 3.2 fork,委托JDK 9+ API在运行时定义类。由于此代码路径仅在JDK 9或更高版本上实际运行时才会处于活动状态(特别是在已删除用于定义类的备用API的JDK 11上是必需的),因此在将现有应用程序升级到JDK 11时可能会出现副作用。

Spring有一个后备,它试图缓解类定义问题,可能导致记录JVM警告,而标准代码路径在JDK 11上提供无警告经验,用于常规类定义。考虑在这种情况下重新访问类定义和字节码处理工具,将它们升级到JDK 11策略。

核心容器

核心容器已针对Graal兼容性(基板VM上的本机映像)进行了微调,并且通常针对较少的启动开销和较少的垃圾收集压力进行了优化。作为这项工作的一部分,已经简化了几种内省算法,以避免不必要的反射步骤,可能会导致在明确定义的位置之外声明的注释产生副作用。

嵌套配置类检测

根据它们的原始定义,嵌套配置类现在只在顶级@Configuration或其他@Component原型类上检测到,而不是简单地使用@Import或@ComponentScan。较旧版本的Spring在非构造型类上过度内省嵌套类,在某些情况下会导致显着的启动开销。

如果在普通类上意外地依赖嵌套类检测,只需声明包含具有配置/组件构造型的类的那些。

Web应用程序

转发标题

“Forwarded”"X-Forwarded-*"反映客户原始地址的标题和标题不再在适用的地方单独检查,例如同源CORS检查MvcUriComponentsBuilder等。

应用有望使用的一种:

Spring Framework自己的ForwardedHeaderFilter。
支持来自HTTP服务器或代理的转发标头。
请注意,ForwardedHeaderFilter可以在安全模式下进行配置,在此模式下,它会检查并丢弃此类标头,以免影响应用程序。

编码模式 DefaultUriBuilderFactory
DefaultUriBuilderFactory已切换编码模式以默认强制执行更严格的URI变量编码。这可能会影响使用WebClient默认设置的任何应用程序,或任何DefaultUriBuilderFactory直接使用的应用程序。请参阅“编码URI”部分以及Javadoc for DefaultUriBuilderFactory#setEncodingMode。

错误响应的内容协商

生成条件@RequestMapping不再影响错误响应的内容类型。

多部分和查询值

现在,与Apache Commons FileUpload的集成可以根据Servlet规范3.1节的要求,将多部分参数值与查询中的其他请求参数进行聚合。以前它只返回多部分参数值(如果存在)。

HTTP选项

@RequestMapping现在,对方法中的HTTP OPTIONS的内置支持始终将HTTP OPTIONS添加为受支持的HTTP方法之一,而之前则没有。

1. Spring Framework 5.x 之概览相关推荐

  1. [译] 每天一段 Spring 5 官方文档(5.1.4.RELEASE)—— Spring Framework Overview 06

    Spring 框架概览 开始时间 10:30,结束时间 10:32,用时 2 min,这段最少了 The Spring Framework also supports the Dependency I ...

  2. Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion(二)

    接前一篇 Spring Framework 官方文档学习(四)之Validation.Data Binding.Type Conversion(一) 本篇主要内容:Spring Type Conver ...

  3. Spring Framework框架起步,小白都看得懂(官翻版)!

    写在开头 本篇章介绍Spring框架的完整的全部技术.写这篇文章的目的是,一方面为了给初入后端开发的才子一篇入门指导,另一方面是为了自己对于基础知识的查阅. Spring不一定是最好的框架(虽然综合能 ...

  4. Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion

    本篇太乱,请移步: Spring Framework 官方文档学习(四)之Validation.Data Binding.Type Conversion(一) 写了删删了写,反复几次,对自己的描述很不 ...

  5. Spring Framework 开发参考手册中文(在线HTML)

    '原文:http://blog.csdn.net/zfrong/article/details/3971722 Spring Framework 开发参考手册中文(在线HTML) Spring Fra ...

  6. 手动创建Spring项目 Spring framework

    之前学习框架一直是看的视频教程,并且在都配套有项目源码,跟着视频敲代码总是很简单,现在想深入了解,自己从官网下载文件手动搭建,就遇到了很多问题记载如下. 首先熟悉一下spring的官方网站:http: ...

  7. Spring Framework 6 将采用 Java 17,是时候将你的应用升级了

    关于从先前的长期支持版本(Java 11 和 Java 8)迁移代码,你需要知道的是什么? 整理 | 王晓曼 出品 | CSDN(ID:CSDNnews) Spring Framework 6 将采用 ...

  8. spring原理案例-基本项目搭建 01 spring framework 下载 官网下载spring jar包

    下载spring http://spring.io/ 最重要是在特征下面的这段话,需要注意: All avaible features and modules are described in the ...

  9. 在Spring Framework中@Inject和@Autowired有什么区别? 在什么条件下使用哪一个?

    本文翻译自:What is the difference between @Inject and @Autowired in Spring Framework? Which one to use un ...

最新文章

  1. 「小程序JAVA实战」小程序的视频展示页面初始化(63)
  2. 如何高效的做机器学习项目
  3. virtualbox奇葩的问题-unable to load r3 module
  4. OS / 理论 / 什么是原子操作?
  5. Spectre CPU漏洞借着BPF春风卷土重来
  6. 如何判断一条曲线是否自己相交?
  7. 前端程序员容易忽视的一些基础知识
  8. vscode linux新建c语言,Ubuntu16.04下配置VScode的C/C++开发环境
  9. java 队列总结queue v3 svv.docxjava 队列总结queue v3 svv.docx atitit. java queue 队列体系总结o7t 1. 队列概念 1 1.1. 队列
  10. ENVI软件App Store插件工具的下载、安装与使用方法
  11. 《编码-隐匿在计算机背后的语言》 —— 读书笔记(三):数字
  12. MAE 论文逐段精读【论文精读】(深度学习论文篇)
  13. java周总结1106
  14. Gensim:word2vec(jieba分词,去停用词)
  15. vue 移动端音乐(3) amp;amp;gt;热门歌单推荐部分(webpack-dev-conf.js做后端接口代理+scroll插件)
  16. C语言动态申请内存空间之malloc(),calloc(),realloc()函数
  17. android百度地图 自定义气泡,百度地图自定义吹出框(气泡)(转)
  18. 在一个excel里面直接批量从谷歌地图抓取经纬度(vba部分)
  19. 微积分之六——无穷级数
  20. 【观察】红点设计博物馆里的“艺术品”

热门文章

  1. [TFF学习]官方教程jupyter运行记录_联邦学习之图像分类任务_1
  2. 使用Log-Pilot + logstash+Elasticsearch + Kibana 收集 kubernetes 日志
  3. 『迷你教程』LSTM网络下如何正确使用时间分布层
  4. Ae 效果详解:Keylight(1.2)
  5. 深入理解中英文字符utf-8编码
  6. 2021年 第七届 互联网+大赛 报名详细流程 全国大学生互联网+大赛全国大学生创业网 (保姆级指南:如何同意对方邀请)
  7. python kazoo模块的使用
  8. 人工智能数学基础(高等数学基础)
  9. 震撼大气蓝色光效粒子对撞logo展示PR片头模板
  10. 第五周-css3重点总结