本文档基于SpringFramework 5.3.24 https://docs.spring.io/spring-framework/docs/5.3.24/reference/html/
Overview history, design philosophy, feedback, getting started.
第一章概述,本章介绍Spring的历史、设计理念、反馈、准备开始。
Spring 使构建Java企业级应用更加简单。它提供了在企业环境中使用 Java 语言所需的一切,支持 Groovy 和 Kotlin 作为 JVM 上的替代语言,并且可以根据应用程序的需要灵活地创建多种架构。从Spring框架5.1开始,Spring提供至少JDK8以上到JDK 11 长期支持版本的开箱即用的支持。JDK 8u60 版本是最低推荐版本的补丁发布版本,但通常建议使用最近的补丁发布版本。
Spring支持的应用场景非常广泛。在一个大型企业,应用通常长期存在并在运行在同一JDK和应用服务器上,其升级周期不在开发人员控制范围。其他的可能作为嵌入服务器的jar运行在云环境中。还有一些可能是不需要服务器的独立应用程序(例如批处理或集成工作负载)。
Spring是开源的。它有一个庞大而活跃的社区,可以根据各种现实世界的用例提供持续的反馈。这帮助Spring在很长一段时间内成功发展。
1.我们说的“Spring”是什么意思
“Spring”这个词在不同语境中有不同的含义。它可以用来指代Spring框架项目本身,它是一切(Spring生态)的起点。随着时间推移,其他Spring项目已经构建在Spring框架之上。最常见的情况,人们所说的“Spring”是指Spring全家桶项目。本参考文档聚焦于最基础的——Spring框架自身。
Spring框架被分为许多模块。应用可以选择它们需要的模块。(Spring)的核心是核心容器(core container)的模块,它包含了一个配置模型和依赖注入机制。除此之外,Spring框架为不同的应用架构提供基础支持,包含消息传递、事务数据的持久化、网络服务。也包含基于Servlet的Spring MVC网络框架与并行的Spring WebFlux响应式Web框架。
关于模块的注意事项:Spring 的框架 jar 允许部署到 JDK 9 的模块路径(“Jigsaw”)。对使用开启Jigsaw的应用,Spring Framework 5 jar包 带有“Automatic-Module-Name”(自动模块名)清单条目,它定义了稳定的语言级模块名称(“spring.core”、“spring.context”等),独立于 jar 工件名称(jar 遵循使用“-”而不是“.”的相同命名模式,例如“spring-core”和“spring-context”)。当然,Spring的框架Jar包仍能在JDK8和9+的classpath(类路径)上正常工作。
2.Spring与Spring框架的历史
Spring为应对早期J2EE规范的复杂性于2003年应运而生。虽然有人认为Java EE与Spring是竞争关系,Spring实际上是对JavaEE的补充。Spring开发模型并没有完全符合Java EE平台规范,而是谨慎地集成了Java EE体系中个别规范:
- Servlet API(JSR 340)(译者注:Servlet 即 Server Applet的缩写,译为“服务器端小程序”,是一种使用Java语言开发动态网站的技术,这个JSR是用来开发Java Servlets 3.1版本的规范)
- WebSocket API (JSR 356) (译者注:WebSocket 是一种长连接网络通讯协议,该JSR定义了创建WebSocket程序的标准接口)
- Concurrency Utilities (JSR 236)(译者注:并发工具包API用于在不损害容器完整性的情况下使应用程序组件具备并发能力,保留Java EE平台的优势)
- JSON Binding API (JSR 367)(译者注:标准的Java对象与JSON消息之间互相转换的绑定层)
- Bean Validation (JSR 303)(译者注:该JSR定义了基于注解来校验JavaBean的元数据模型和API,取代使用XML验证扩展元数据)
- JPA (JSR 338) (译者注:Java Persistence API,简称JPA,用来管理持久性的Java对象和关系(表属性)之间的映射的API)
- JMS (JSR 914) (译者注:全称Java Message Service,该JSR为JMS API的勘误表)
- 以及用于事务协调的 JTA/JCA 设置(如有必要)。
Spring框架也支持依赖注入(Dependency Injection JSR 330) 和公共注解(Common Annotations JSR 250) 规范,应用开发者可自行选择使用不是Spring框架提供的Spring的特定机制。
Spring框架5.0版本至少需要Java EE7(如,Servlet 3.1+,JPA 2.1+),同时提供在运行期与更新的API和Java EE8 (如,Servlet 4.0, JSON Binding API)开箱即用的集成。这种能力保证了Spring的普遍适用性,比如 Tomcat 8 和 9,WebSphere 9 和 JBoss EAP7。
随时间的推移,Java EE在应用开发的角色中已经发生改变。在JavaEE与Spring的早期,应用都被创建部署在一个应用服务器内。而今天,有了Spring Boot的支持,应用可以通过Servlet容器内嵌做很小的改变,就能在DevOps和云友好方式下创建(与运行)。到了Spring框架5开始,一个WebFlux应用甚至可以不使用Servlet API直接运行在不是Servlet容器的服务器上(如Netty)。
在Spring的不断创新与发展中,除了Spring框架,还有其他的项目,如Spring Boot、Spring Security、Spring Data、Spring Cloud、Spring Batch等等。记住每个项目都有自己的源代码存储库、问题跟踪器和发布节奏是重要的,可通过spring.io/projects 来查看完整的Spring项目列表。
3.设计理念
当你开始学习一个框架,重要的是不仅要知道它做什么,还要知道它遵循什么原则。以下是 Spring 框架的指导原则:
- 提供每层都可以选择的能力(Provide choice at every level)。Spring让你尽可能晚地推迟设计决定。举个例子,你可以通过修改配置切换持久性提供者(译者注:如数据库),而不需要修改代码。许多其他基础设施问题以及与第三方 API 的集成也是一样的。
- 容纳不同的观点(Accommodate diverse perspectives)。Spring 拥抱灵活性,并且对事情应该如何完成没有固执己见。它以不同的视角支持广泛的应用需求。
- 强大的向后兼容性(Maintain strong backward compatibility)。Spring的演变经过精心管理,在版本间只会强制做出少量重大更改。Spring 精心选择的一系列 JDK 版本和第三方库,以方便维护依赖于 Spring 的应用程序和库。
- 关注API设计(Care about API design)。Spring团队倾注了大量的思考与时间在设计直观的、可以跨越多个版本的API。
- 设定代码的高标准(Set high standards for code quality)。Spring框架强调javadoc要有意义、及时更新并且准确。它是极少数可以声称代码结构清晰且包之间没有循环依赖关系的项目之一。
4.反馈和贡献(Feedback and Contributions)
对于怎样做的问题或诊断或调试问题,我们推荐使用Stack Overflow。(我们在StackOverflow定义了)一系列推荐的标签可通过点这里进入。如果你相当肯定问题是Spring框架的,或者想推荐一个特性(feature),请使用Github的Issues.
如果你解决方案或建议的补丁,你可以在Github上提交一个PR。但请记住除了最琐碎的问题外,我们希望在问题跟踪器中提交一个票据(指,ISSUE号)可以在那里对问题进行讨论并留下记录供将来参与。
更多细节可以查看最顶层项目页面的贡献准则。
5.准备开始(Getting Started)
如果你只是初学Spring的人,可能通过使用Spring框架开发的Spring Boot创建项目更合适。Spring Boot提供了一个快速(和稍显武断)的方式创建一个准备用于生产环境的基于Spring的项目。它基于Spring框架的约定优于配置的、设计让你能尽快启动运行。
你可以使用 start.spring.io 生成基础项目 或 跟着准备开始指南("Getting Started" guides), 比如 Getting Started Building a RESTful Web Service。除了更容易理解之外,这些指南非常专注于任务,大部分都基于 Spring Boot。它们还涵盖了您在解决特定问题时可能要考虑的 Spring 产品组合中的其他项目。
标签:Java,框架,Spring,API,文档,JSR,Overview,Servlet From: https://www.cnblogs.com/hellxz/p/16905633.htmlVersion 5.3.24
Last updated 2022-11-16 07:51:36 UTC