资料内容:
1.1 Spring 与 Spring Boot
当学习一门技术时,先对其有一个大概的认识是非常必要的,这样对学习方向的把控很有帮
助。本节先来了解一下 Spring 与 Spring Boot 的基本概念,看看它们在开发过程将扮演什么角色,
发挥什么作用。
1.1.1 当我们谈论 Spring 时会谈论些什么
在不同的语境中 Spring 蕴含不同的含义。狭义的解释为 Spring 指 Spring Framework,因为这
是生态的核心,Spring 起源于此。但随着时间推移,社区基于 Spring Framework 构建了更多其他的
项目,这样一来,当人们说到“Spring”时,往往指的是整个 Spring 生态。
Spring 的架构如图 1.1 所示,其核心 Core Container 是一个 IoC(Inversion of Control)容器。
IoC 即控制反转,是一种面向对象的思想,作用在于将对象之间的依赖关系交由框架进行统一管理。
具体的实现方式是 DI(Dependency Injection,依赖注入)。简单来说,就是开发人员通过 XML 配
置或 JavaConfig 的方式将依赖关系告知容器。容器在“恰当”的时机去创建对象,而不需要开发
人员过多的关注。
Web 模块,指 Web 应用基础功能的集合。其中包含对文件上传的支持、使用 Servlet 监听器初
始化 IoC 容器、Web 应用上下文等内容。另外还有对基于 Servlet 开发的支持,这块在 Spring 的体
系中又被称作 Spring MVC。在第 2 章将着手构建一个 Web 应用,就离不开 Spring MVC 的支持。
Data Access/Integration,即数据访问与集成方案。JDBC、ORM、OXM 等对于数据库操作的
方案被包含其中。在这些模块当中,ORM 将会在之后的章节着重介绍。相较于 JDBC 这样基础的
数据库访问方案,使用 ORM 开发起来更为高效。ORM 是对 JDBC 的封装,将字段高效地与对象
进行映射,将对数据库的操作转换为对对象的操作。我们将在第 4 章开始学习如何利用这些工具访
问数据库。
AOP(Aspect-Oriented Programming,面向切面编程)是通过预编译方式和运行期间动态代理
实现程序功能统一维护的一种技术,是 OOP 的延续,也是 Spring Framework 中的一个重要内容,
是函数式编程的一种衍生范型。利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻
辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
Test 模块提供了 Spring 应用使用 JUnit 和 TestNG 进行单元测试和集成测试的支持。在测试过
程中能轻松读取到应用上下文,并且它具有可用于隔离测试代码的 Mock 对象。
1.1.2 什么是 Spring Boot
Spring Boot 是在 Spring 的基础上构建起来的一个项目。它基于“约定优于配置”(Convention
Over Configuration)的理念,解决了基于 Spring 开发需要繁复配置的痛点。使用 Spring Boot 进行
开发可以巧妙地选择项目所需的依赖项,对依赖中涉及的功能进行自动配置,并且能在不依赖 Web
容器的情况下一键启动,大大简化了应用的开发和部署过程。
以下是 Spring Boot 提供的高级功能:
自动配置:根据“starter”依赖项迚行自动配置。
独立:无需将程序部署到另外的 Web 容器,可通过 run 命令直接启动。
智能:配置中的默认值会根据依赖项自动调整。
使用 Spring Boot 可以轻松构建一个企业级的应用并且快速上线,而不用担心配置的准确性和
安全性。图 1.2 所示是 Spring Boot 与 Spring Cloud、Spring Cloud Data Flow 的关系。
1.1.3 Spring Boot 的优势
为什么选择 Spring Boot 而不是其他的解决方案?理由有以下几点:
(1)成熟:Spring Boot 基于 Spring Framework。Spring Framework 已经开发超过 15 年,是 J2EE
的轻量级替代方案。
(2)稳定:Spring 生态中的核心模块长期稳定运行,并且它们的更改都向后兼容。开发人员
在做版本升级的过程中,不会感到“举步维艰”。
(3)基于 JVM(Java 虚拟机):Spring 是基于 Java 的,自然依赖于 JVM。JVM 上除了 Java
之外还可以运行其他的语言,例如:Kotlin、Groovy、Scala 等,Spring Boot 同样可以使用这些语
言进行开发。
(4)由公司运作的开源项目:这意味着项目可以有规律地更新以及维护有基本的保障。
(5)云原生:Spring Boot 遵循云应用程序的部署原则,并为开箱即用的云做好了准备。它与
Spring Cloud 一起,可以轻松构建分布式系统。
(6)丰富的支持:使用 Spring 可以轻松地将应用连接到不同的关系型数据库、NoSQL、消息
队列等中间件。
(7)灵活性:使用 Spring Boot 既可以开发经典的服务端(或称为服务器端,本书统一简称为
服务端,以便具有更广义的含义)渲染 Web 应用,也可以开发 RESTful 或者其他形式的 Web-API,
甚至可以创建批处理和常规命令行应用程序。