Spring 使企业 创建 Java 应用程序变得更加容易. 它提供了在企业环境中 Java 语言所需的一切,,并支持 Groovy 和 Kotlin 作为 JVM 上的替代语言,并可根据应用程序的需要灵活地创建多种体系结构. 从 Spring Framework 5.1 开始,Spring 需要 JDK 8(Java SE 8+),并且已经为 JDK 11 提供了现成的支持. 另外,Java SE 8更新了 60 个提议作为 Java 8 的最低 release 版本,但通常建议使用最新的 release 版本.
Spring 支持各种应用场景, 在大型企业中, 应用程序通常需要运行很长时间,而且必须运行在 jdk 和应用服务器上,这种情况下开发人员无法控制其升级周期. 其他可能作为一个单独的 jar 嵌入到服务器去运行,也有可能在云环境中. 还有一些可能是不需要服务器的独立应用程序(如批处理或集成的工作任务).
Spring 是开源的. 它拥有一个庞大而且活跃的社区,提供不同范围的,真实用户的持续反馈. 这也帮助 Spring 不断地改进,不断发展.
1. "Spring" 是什么?
Spring 在不同的背景下有这不同的含义. 它可以指 Spring Framework 项目本身,这也是创建他的初衷. 随着时间的推移,其他的 "Spring" 项目已经构建在 Spring 框架之上. 大多数时候,当人们说 "Spring",他们指的是整个项目家族. 本参考文档主要侧重于 Spring 的基础: 也就是 Spring 框架本身.
整个 Spring 框架被分成多个模块,应用程序可以选择需要的部分. core 是核心容器的模块,包括模块配置和依赖注入机制 . Spring 框架还为不同的应用程序体系结构提供了基础支持,包括消息传递,事务数据和持久化以及 Web,还包括基于 Servlet 的 Spring MVC Web 框架 ,以及 Spring WebFlux 响应式Web框架.
关于模块的说明: Spring Framework 的 jar 包允许部署到 JDK 9 的模块路径 ("Jigsaw"). 为了在支持 Jigsaw 的应用程序中使用, Spring Framework 5 的 jar 带有 "Automatic-Module-Name" 清单条目,它定义了稳定的语言级模块名称(例如 "spring.code","spring.context" 等)独立于 jar 部件名称 (jar 遵循相同的命名模式使用 "-" 号代替 ".",例如 "spring-core" 和 "spring-context" ). 当然,Spring Framework 的 jar 包在 JDK 8 和 9+ 的类路径上都能保持正常工作.
2. Spring 和 Spring 框架的历史
Spring 的初版发布在 2003 年,是为了克服早期 J2EE 规范的复杂性. 虽然有些人认为 (J2EE) 和 Spring 是竞争的,但是 Spring 实际上是对 Java EE 的补充. Spring 编程模型不受 Java EE 的平台制约,相反 它与精心挑选的个别规范的 Java EE 项 目结合:
Spring 框架还支持依赖注入 (JSR 330) 和通用注解 (JSR 250) 规范, 应用程序开发人员可以选择使用这些规范,而不是 Spring Framework 提供的 Spring 特定机制.
在 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 8/9、WebSphere 9 或者 JBoss EAP 7 等等.
随着时间的不断推移,Java EE在应用程序开发中越发重要,也不断发展、改善. 在 Java EE 和 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
等等. 请记住,每一个 Spring 项目都有自己的源代码库, 问题跟踪以及发布版本. 请上 spring.io/projects 查看所有 Spring 家族的项目名单.
3. Spring 的设计理念
当你学习一个框架时,不仅需要知道他是如何运作的,更需要知道他遵循什么样的原则,以下是 Spring 框架遵循的原则:
-
提供各个层面的选择. Spring 允许您尽可能延迟设计决策. 例如,您可以在不更改代码的情况下通过配置切换持久性功能. 对于其他基础架构的问题以及与第三方 API 的集成也是如此.
-
包含多个使用视角. Spring 的灵活性非常高,而不是规定了某部分只能做某一件事.他以不同的视角支持广泛的应用需求
-
保持向后兼容. Spring 的发展经过了精心的设计,在不同版本之间保持与前版本的兼容. Spring 支持一系列精心挑选的 JDK 版本和第三方库,以方便维护依赖于 Spring 的应用程序和库.
-
关心 API 的设计. Spring 团队投入了大量的思考和时间来制作直观的 API,并在许多版本和许多年中都保持不变.
-
高标准的代码质量. Spring 框架提供了强有力的、精确的、即时的 Javadoc. Spring 这种要求干净、简洁的代码结构、包之间没有循环依赖的项目在 Java 界是少有的.
4. 反馈和贡献
对于操作方法问题或诊断或调试问题,我们建议使用 Stackoverflow. Spring 在此网站上有一个专用的页面 here ,列出了建议使用的标记. 如果你相当确定 Spring 框架存在问题,或者想建议添加功能等等,可以使用 GitHub Issues.
如果你想到了某问题的解决方案或者想建议,你可以在 Github. 但是, 我们希望在此之前,你可以在问题跟踪页面先提交一波,在那里可以进行讨论并留下记录以作参考.
有关更多详情,请参阅 CONTRIBUTING.
5. 入门指南
如果你是刚开始使用 Spring 的话,希望你能使用基于 Spring Boot 来编写应用程序,由此开始使用 Spring 框架. Spring Boot 提供了一种快速(固定设置 ) 的方式来创建即时能用的 Spring 应用程序. 它基于 Spring 框架,利用已有的约束配置,目的是让你的程序尽快跑起来.
你可以使用 start.spring.io 里的步骤来生成基本项目. 或者参考 "入门" 指南, 例如 开始创建 RESTful 风格的 Web 服务 . 除了易于理解,这些指南都是非常注重创建的过程,其中大多数是基于 Spring Boot 的. 当然,里面还囊括了 Spring 其他很多项目,你可能在需要某些功能时用得上.