前言
在 1964 年的纽约世界博览会上,沃特·迪士尼向世界介绍了三件有开创意义的东西:“小小世界”(it’s a small world)、“与林肯先生共度的伟大时刻”(Great Moments with Mr. Lincoln)以及 “文明演进之旋转木马”(Carousel of Progress)。所有这三样东西随后都搬进了迪士尼乐园和迪士尼世界,你今天仍能看见它们。
其中,我最喜欢的是 “文明演进之旋转木马”,这大约也是沃特·迪士尼的最爱之一。这既是骑行,又是舞台表演,座位区域围绕着中心区域旋转,上演四场表演,讲述了一个家庭在 20 世纪不同时代(分别是 20 世纪初、20 世纪 20 年代、20 世纪 40 年代和近年)的故事,突出了不同年代技术的进步。从手摇洗衣机,到电灯和收音机,到自动洗碗机和电视,再到电脑和声控家电,无一不在述说着创新的故事。
在每幕表演中,父亲(也是演出的叙述者)都会讲述最新的发明,并带上一句 “这玩意儿不能更好了”,到头来却发现随着技术的进步,它的确变得更好了。
比起这场舞台演出,Spring 的历史要短得多。但是对于 Spring,我的感受和 “演进老爹”(Progress Dad)对20世纪的体会相似。似乎每个 Spring 应用程序都让开发者的生活更上一个台阶,仅从 Spring 组件的声明和织入方式就能看出端倪。让我们来看看 Spring 历史中的一些演化历程。
-
Spring 1.0 的出现彻底改变了我们开发企业级 Java 应用程序的方式。Spring 的依赖注入与声明式事务意味着组件之间再也不存在紧耦合,再也不用重量级的 EJB 了。这玩意儿不能更好了。
-
到了 Spring 2.0,我们可以在配置里使用自定义的 XML 命名空间,更小、更简单易懂的配置文件让 Spring 本身更便于使用。这玩意儿不能更好了。
-
Spring 2.5 让我们有了更优雅的面向注解的依赖注入模型(即 @Component 和 @Autowired 注解),以及面向注解的 Spring MVC 编程模型。不用再去显式地声明应用程序组件了,也不再需要去继承某个基础的控制器类了。这玩意儿不能更好了。
-
到了 Spring 3.0,我们有了一套基于 Java 的全新配置,它能够取代 XML。在 Spring 3.1 里,一系列以 @Enable 开头的注解进一步完善了这一特性。终于,我们第一次可以写出一个没有任何 XML 配置的 Spring 应用程序了。这玩意儿不能更好了。
-
Spring 4.0 对条件化配置提供了支持,根据应用程序的 Classpath、环境和其他因素,运行时决策将决定使用哪些配置,忽略哪些配置。那些决策不需要在构建时通过编写脚本确定了;以前会把选好的配置放在部署的包里,现在情况不同了。这玩意儿不能更好了。
现在轮到 Spring Boot 了。虽然 Spring 的每个版本都让我们觉得一切都不能更好了,但 Spring Boot 还是向我们证明了 Spring 仍然有巨大的潜力。事实上,我相信 Spring Boot 是长久以来 Java 开发历程里最意义深刻、激动人心的东西。
以历代 Spring Framework 的进步为基础,Spring Boot 实现了自动配置,这让 Spring 能够智能探测正在构建何种应用程序,自动配置必要的组件以满足应用程序的需要。对于那些常见的配置场景,不再需要显式地编写配置了,Spring 会替你料理好一切。
选择在构建时和运行时要包含在应用程序里的库,往往要花费不少工夫,而 Spring Boot 的起步依赖(starter dependency)将常用依赖聚合在一起,借此简化一切。它不仅简化了你的构建说明,还让你不必苦思冥想特定库和版本。
针对使用 Groovy 来开发 Spring 应用程序,Spring Boot 的命令行界面提供了一个令人瞩目的选项,它将 Java 应用程序开发过程中的噪声降到最低,开发方式平易近人。有了 Spring Boot CLI,就不再需要访问方法了,不再需要诸如 public 与 private 之类的访问修饰符,也不再需要分号或者 return 关键字。在许多场景中,import 语句都可以去掉。因为你是在命令行里以脚本方式运行应用程序,所以连构建说明都能免了。
Spring Boot 的 Actuator 让你能一窥应用程序运行时的内部工作细节,看看 Spring 应用程序上下文里都有哪些 Bean, Spring MVC 控制器是怎么与路径映射的,应用程序都能取到哪些配置属性,诸如此类。
Spring Boot 为我们带来了这么多奇妙的特性,这玩意儿当然不能更好了!
本书中你将看到,Spring Boot 着实让 Spring 比以前更好了。我们将一同去了解自动配置、Spring Boot 起步依赖、Spring Boot CLI 和 Actuator。我们还会去摆弄一下 Grails 的最新版本,它就是基于 Spring Boot 的。临近末尾,你也许会觉得 Spring 不可能更好了。
如果说迪士尼的 “文明演进之旋转木马” 告诉了我们什么事情,那就是当我们觉得什么东西不可能更好了的时候,它一定会变得更好。Spring Boot 的进步正在带来越来越大的益处。真的难以想象 Spring 还能变得更好,但它肯定会更好。毫无疑问,Spring 的前景总是美好的。
章节简介
-
第 1 章会对 Spring Boot 进行概述,内容涵盖最基本的自动配置、起步依赖、命令行界面和 Actuator。
-
第 2 章会进一步深入 Spring Boot,重点介绍自动配置和起步依赖。在这一章里,你将用很少的显式配置来构建一个完整的 Spring 应用程序。
-
第 3 章是对第 2 章的补充,演示了如何通过设置应用程序属性来改变自动配置,或者在自动配置无法满足需要时彻底覆盖它。
-
在第 4 章里我们会看到如何为 Spring Boot 应用程序编写自动化集成测试。
-
在第 5 章里你将看到一种有别于传统 Java 开发方式的做法,Spring Boot CLI 能让你通过命令行来运行应用程序,这个应用程序完全是由 Groovy 脚本构成的。
-
讲到 Groovy,第 6 章会介绍 Grails 3,这是 Grails 框架的最新版本,它基于 Spring Boot。
-
在第 7 章里你将看到如何通过 Spring Boot 的 Actuator 了解运行中的应用程序,以及它是如何工作的。你还会看到如何使用 Actuator 的 Web 端点、远程 shell 和 JMX MBean 对应用程序一窥究竟。
-
第 8 章讨论了各种部署 Spring Boot 应用程序的方法,包括传统的应用程序服务器部署和云部署。