版本5.2.6.RELEASE

Spring使创建Java企业应用程序变得容易。它提供了在企业环境中使用Java语言所需的一切,并支持Groovy和Kotlin作为JVM上的替代语言,并且可以根据应用程序的需求灵活地创建多种体系结构。

从Spring Framework 5.1开始,Spring需要JDK 8+(Java SE 8+),并提供对JDK 11 LTS的现成支持。

建议将Java SE 8更新60作为Java 8的最低修补程序版本,但通常建议使用最新的修补程序版本。

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

Spring是开源的。它拥有一个庞大而活跃的社区,可以根据各种实际用例提供持续的反馈。

这些帮助Spring在很长一段时间内成功地发展了。

1. “Spring”是什么意思

”Spring“这个词在不同的环境中代表不同的含义。

最开始的时候,它指的是Spring框架项目本身,但是随着时间的推移,又发展了其他的Spring项目。

所以当现在我们提起”Spring“的时候,它指的是整个Spring家族。

我们的这个Spring参考指南指的是一切Spring的基础:Spring Framework。

Spring Framework被分成了很多个模块,我们在构建应用程序的时候可以自由选择使用哪个模块。

最核心的模块是核心容器包括配置模块和依赖注入机制。

除此之外,Spring Framework提供了对不同应用架构的基础支持,包括消息,交易数据,存储和网站。

他还包括了Servlet-based Spring MVC web framework和最新的响应式Spring WebFlux reactive web framework。

在使用模块上有一点需要注意:Spring Framework的jar包被允许部署到JDK9的模块路径(“Jigsaw”)。

当Spring Framework 5被用在开启了Jigsaw的应用程序中时,Spring会开启一个叫做“自动模块名(Automatic-Module-Name)”的功能,并在其中定义了稳定的语言级模块名字,比如("spring.core", "spring.context"等 ),他们和其所在的jar包名字是不一样的(jar包名字已“-”分割而不是“,”,如"spring-core" 和 "spring-context")。

当然Spring Framework的jar包可以在JDK8和JDK9+环境中正常运行。

2. Spring和Spring框架的历史

Spring是在2003年,作为对之前的复杂的J2EE规范而产生的。

有些人认为Spring和J2EE是竞争关系,实际上他们是互补的。

Spring的编程模块虽然并没有遵照J2EE的平台规范,但是它和如下的J2EE规范紧密的结合:

同时,Spring框架也支持依赖注入(JSR 330)和通用注解(JSR 250)规范,开发人员可以自由选择使用。

在Spring框架5.0中,Spring至少要求Java EE 7以上(比如:Servlet 3.1+, JPA 2.1+),

同时提供了对于Java EE 8中新API在运行时的支持(Servlet 4.0, JSON Binding API),

这使得Spring可以全面支持多种服务器:Tomcat 89, WebSphere 9,JBoss EAP 7

Java EE在应用程序开发中的角色在随时间变化,

最开始,应用程序必须被部署成为一个服务。随着SPring boot的出现,

现在的应用程序可以在devops或者云环境中随意创建。

在Spring 框架5中,WebFlux应用程序甚至都不需要使用Servlet API,并且可以运行在类似于Netty这种非Servlet容器中。

Spring还将继续发展下去,除了Spring框架,Spring家族还有其他的一些非常棒的项目:

  • Spring Boot,
  • Spring Security,
  • Spring Data,
  • Spring Cloud,
  • Spring Batch等。

每个项目都有自己的代码库,问题跟踪机制和发版计划。如果想知道其他项目的具体情况可以参照:spring.io/projects

3. 设计哲学

当你接触到一个框架的时候,不仅仅要知道这个框架是怎么使用的,更需要了解框架的设计原则,下面是Spring框架的设计原则:

  • 在每一层都提供选项。

    Spring可以让你尽可能的推迟选择。比如你可以通过配置文件来切换数据存储的提供方而不需要改动代码。

    这个规则也很好的应用在和第三方API集成中。

  • 适应不同的视角。

    Spring具有灵活性,它不会强制为你决定该怎么选择。它以不同的视角支持广泛的应用需求。

  • 保持强大的向后兼容性。

    Spring的发展经过了精心的管理,使得版本之间几乎没有割裂的变化。

    Spring支持精心选择的一系列JDK版本和第三方库,以便于维护依赖于Spring的应用程序和库。

  • 关心API设计。

    Spring团队投入了大量的思想和时间来制作直观的API,这些API可以在多个版本中使用,并可以使用很多年。

  • 为代码质量设定高标准。

    Spring框架将重点放在有意义、最新和准确的JavaDoc上。

    它是少数几个可以声明在包之间没有循环依赖关系的干净代码结构的项目之一。

4. 反馈和贡献

我们建议使用stackoverflow来提问、诊断或调试问题,我们还有一个问题页面,列出了建议使用的标签。如果你相当确定Spring框架中存在问题,或者希望提出一个特性,请使用github issues

如果你有一个解决方案或建议的修复方案,你可以在Github上提交pull请求。为了留痕和供将来参考,除了一些细小的问题外,我们需要在问题跟踪中提交一个ticket,用以进行讨论。

有关更多详细信息,请参考根目录下面的CONTRIBUTING文件。

5. 入门

如果你刚开始使用Spring,那么你可能希望通过创建一个基于Spring Boot的应用程序来开始使用Spring框架。

Spring Boot提供了一种快速(和固定)的方法来创建一个可用于生产环境的基于Spring的应用程序。

它基于Spring框架,使用约定的方式而不是配置方式,旨在让你尽快启动和运行。

你可以使用start.spring.io生成一个基本项目,或者遵循“入门指南”,例如开始构建一个RESTful Web服务

这些指南不仅易于理解,而且以任务为导向,而且大多数都基于Spring Boot。它们还涵盖了Spring产品组合中的其他项目,可以为你在解决特定问题时做参考。

它们还涵盖了Spring产品组合中的其他项目,可以为你在解决特定问题时做参考。