Spring 5.3.12 官方文档翻译个人练习

Spring Version 5.3.12

本次翻译项目启动于 2021年10月11日,翻译内容掺杂个人理解,并非官方一板一眼翻译,因此若有不对的地方,可留言修改

概述

Spring的含义

Spring通常代表Spring Framework,但随着时间迁移,衍生出许多基于Spring Framework的项目,所以现在的Spring代表了Spring家族下的所有项目。由于此文档聚焦在Spring家族的基础:Spring Framework,因此下面使用Spring替代Spring Framework

Spring划分为多个模块,因此开发者根据情况可以按需引入。最核心的模块是Spring的容器,它包含了配置模型(Configuration Model)和DI(Dependecy Injection, 依赖注入)机制。除此之外,Spring还为不同的应用架构提供了基础设施支持,例如:

  • 消息 Messaging

  • 事务 Transactional

  • 持久化 persistence

  • web应用

    • 基于servletSpring MVC Web

    • 并行的Spring Webflux Reactive Web

有关模块化的小Tips:
—— Spring 支持JDK9的模块化功能:Jigsaw,对于启用了Jigsaw的应用,Spring提供了稳定的模块名称:spring.corespring.context等,采用的命名模式是将项目中的“-”替换为“.”

Spring和Spring框架的历史

为了应对早期J2EE规范的复杂性,Spring于2003年诞生了。一些人认为J2EE和Spring之间是竞争关系,实际上,Spring是用来补充J2EE的。Spring本身并没有重新去实现J2EE规范,相反,它精心挑选了J2EE下的某些独立的规范,并对其进行了整合:

另外,事务方面还可以使用JTA(Java Transaction API) / JCA(Java Connector Architecture)

对于Spring某些自身独有的机制,如依赖注入相关的注解:@Autowired。Spring也提供了其余选择供开发者按需使用,如:

对Spring 5 来说,最低要求是Java EE 7(Servlet 3.1+, JPA 2.1+)。若当前运行环境是Java EE 8(Servlet 4.0, JSON Binding API) ,Spring依旧提供了开箱即用的支持。这使得Spring完全兼容Tomcat 8 / 9WebSphere 9JBoss EAP 7

可参考:Tomcat与Servlet版本关系

随着技术发展,Java EE 在目前应用开发中扮演的角色已经发生了变化。在早期的Java EE和Spring里,应用必须部署在某种Application Server(eg. Tomcat, Jetty)中。如今,在Spring Boot的帮助下,应用基于devopscloud-friendly的方式创建,并内置了Servlet容器,创建后不用做很大的修改即可运行。对于Spring 5而言,一个Webflux应用甚至无需使用Servlet API,并且可以运行在像Netty那样的非Servlet容器上。

同时,Spring家族也在不断的创新和发展。除了Spring 以外,还衍生了许多别的工程:

  • Spring Boot

  • Spring Security

  • Spring Data

  • Spring Cloud

  • Spring Batch

  • 等等

需要记住的是,每一个项目都有其私有的源码仓库、issue追踪和发布情况,可以通过浏览以下网站获取完整的Spring项目列表:

https://spring.io/projects

设计理念

当学习某个框架时,最重要的是了解其遵循的“原则”,而非其实现的功能。以下是Spring 遵循的指导思想:

  • 在应用架构的各层都提供了灵活的“选择”。Spring允许开发者尽可能拖延设计决策,例如在持久层选择了Mybatis进行开发,在项目后期如果想切换别的Persistence Providers,仅需要通过配置即可,无需修改项目代码。此选择同样适用于基础架构问题和整合的第三方API。

  • 包容不同观点。Spring在拥抱灵活性的同时,并不会武断的要求事情应该如何去做。相反的是,对于应用需求上的不同观点(消息队列为例,可能有人觉得rabbitMQ好,可能有人觉得ActiveMQ好),Spring都提供的宽广的支持。

  • 保持强大的向后兼容能力。Spring精心管理其演进过程,强制在不同版本间仅出现极少的重大改变。Spring支持一系列精心挑选的JDK和三方库版本,使得基于Spring构建的应用和库都可以轻松的维护。

  • 精心设计API。为了使API可以更加简单直观使用,以及跨越多个版本使用,Spring团队花费很多时间和思考它的设计。

  • 高质量代码标准。Spring十分重视有意义的、最新的、准确的Java Doc,同时Spring也是一个很优秀的项目,因为极少有项目可以清晰描述代码结构,且不同的包之间不存在循环依赖。

反馈和贡献

如果对Spring有任何操作、诊断、调试上的问题,我们建议先去Stack Overflow 上查询解决方案:

https://stackoverflow.com/questions/tagged/spring+or+spring-mvc+or+spring-aop

若你十分确定这是Spring框架上的问题,或你想对Spring提出一些特性建议,可以通过Github Issues来记录:

https://github.com/spring-projects/spring-framework/issues

对于Spring某些已知问题,可以通过提交Pull RequestGithub,来告知你的想法或你的修复建议。

https://github.com/spring-projects/spring-framework

更多有关此部分的内容可以阅读项目中的 CONTRIBUTING 文件:

https://github.com/spring-projects/spring-framework/blob/main/CONTRIBUTING.md

开始使用Spring

如果你是第一次开始使用Spring,那么推荐你创建基于Spring Boot的工程项目来了解Spring。Spring Boot提供了一种快速的(或者说是武断的)的方式来创建应用,此应用是基于Spring的,并且是产品级别的工程了。Spring Boot的核心思想是 “约定大于配置”,目的就是为了让开发者尽可能迅速的启动并运行项目。

这里所说的 “武断”,是指Spring Boot针对许多整合的API选择了一套默认的实现,而这些在传统的Spring应用中都是需要自己去配置指定的。所以说Spring is not opinionated,而Spring Boot is opinionated。

创建工程有两种方式:

  • 可以通过下面的地址快速创建一个基础的工程:

    https://start.spring.io/

  • 也可以跟随Spring官方的指引文档来一步步创建,为了更好的消化Spring,这些指引以 “任务” 划分,并且大部分都是基于Spring Boot的,从而可以更好的上手。当你想解决某些特定的问题时,你也许想使用Spring家族里的其它项目,放心,此指引文档已经涵盖了这些项目。

    https://spring.io/guides

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值