目录
第1章 Spring Boot简介
Spring框架是由Rod Johnson在2001年开始开发的一个开源框架,主要为了解决企 业级应用程序开发的复杂性。Spring提倡“零”侵入设计原则,颠覆了传统的编程模式。 Spring引入控制反转(Inversion of Control, IoC)的核心编程思想,控制反转还有一个名字 叫作依赖注入(Dependency Injection, DI),就是由容器来管理协同Bean之间的关系,而非 传统实现中,由程序代码直接操控。同时,Spring还把面向切面编程(AOP)集成进来,使 得AOP的编程范式发扬光大。
Spring从IoC容器发展而来,通过不断集成AOP、MVC、OR/Mapping以及几乎你 能想到的各项服务而提供完善的企业应用框架。目前大多数J2EE项目都已经采用Spring 框架。
1.1 从Spring到Spring Boot
1.1.1 从EJB到Spring
EJB ( Enterprise Java Bean)最初的设计思想是为分布式应用服务的。分布式是针对大 型应用构造的跨平台的协作计算,EJB最初的目的就是为这种计算服务的。使用EJB技术 的系统整体架构如图1-1所示。
1.1.2 Spring框架发展简史
略
1.1.3 Spring框架的核心模块
Spring框架如图1-3所示。组成Spring框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。下面我们分别介绍。
1.核心容器模块
核心容器提供Spring框架的基本功能,包括Core、Beans、Context, EL模块。
Core模块封装了框架依赖的最底层部分,包括资源访问、类型转换及一些常用工具类。 Beans模块中的主要组件是BeanFactory,它是工厂模式的实现。Context模块是一"配置文 件,向Spring框架提供上下文信息。EL模块提供强大的表达式语言支持。
1.AOP、Aspects 模块
AOP模块提供了符合AOP Alliance规范的面向切面的编程实现,提供比如日志记录、 权限控制、性能统计等通用功能和业务逻辑分离的技术,并且能动态地把这些功能添加到 需要的代码中;这样各专其职,可降低业务逻辑和通用功能的耦合。Aspects模提供了对 AspectJ的集成,AspectJ提供了比Spring ASP更强大的功能。
2.数据访问/集成模块
该模块包括 JDBC, ORM、OXM、JMS 和事务模块(Transactions)。
事务模块用于Spring管理事务,只要是Spring管理对象都能得到Spring管理事务的好 处,无须在代码中进行事务控制了,而且支持编程和声明性的事务管理。
JDBC模块提供了一个JBDC的样例模板,使用这些模板能消除传统冗长的JDBC编码 还有必须的事务控制,而且能享受到Spring管理事务的好处。
ORM模块提供与流行的“对象-关系映射” ORM框架的无缝集成,包括Hibernate, JPA、MyBatis 等。
OXM模块提供了一个对Object/XML映射实现,将Java对象映射成XML数据,或者将 XML 数据映射成 Java 对象,Object/XML 映射实现包括 JAXB、Castor、XMLBeans 和 XStream0
JMS (Java Messaging Service)模块提供一套“消息生产者、消息消费者”模板以便更加 简单地使用JMS,JMS用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。
3.Web/Remoting 模块
Web/Remoting 模块包含 Web、Web-Servlet、Web-Struts、Web-Porlet 模块。
Web模块提供了基础的Web功能。例如多文件上传、集成IoC容器、远程过程访问
(RMI、Hessian、Burlap)以及Web Service支持,并提供一个RestTemplate类来提供方便的 Restful services 访问。
Web Servlet模块提供了一个Spring MVC Web框架实现。
Web Struts模块提供了与Struts无缝集成,Strutsl.x和Struts2.x都支持。
4.Test模块
Test模块支持Junit和TestNG测试框架,而且还额外提供了一些基于Spring的测试功 能,比如在测试Web框架时,模拟Http请求的功能。
1.2 Spring Boot简介
1.2.1 Spring Boot是什么
Spring Boot由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始 搭建以及开发过程。Spring Boot是伴随着Spring 4.0诞生的。从字面理解,Boot是引导的意思, 因此Spring Boot极大地帮助了开发者快速搭建使用Spring框架开发应用程序的过程。例如, Spring Boot可以直接快速启动一个内嵌的Web容器,而无须单独安装和配置Web服务器。
Spring Boot框架遵循“约定优于配置”的思想。清除了原先使用Spring框架的那些样 板化的配置。Spring Boot继承了原有Spring框架的优秀基因;Spring Boot使得基于Spring 的开发过程更加简易。Spring Boot致力于帮助开发人员快速开发应用。
多年以来,Spring IO平台饱受非议的一点就是大量的XML配置以及复杂的依赖管理。 Spring Boot实现了 “零XML配置”的极简开发体验。
然而,Spring Boot并不是要成为Spring IO平台里面众多“Foundation”层项目的替代者。Spring Boot的目标是为平台带来另一种开发体验,从而简化对这些已有技术的使 用。对于已经熟悉Spring生态系统的开发人员来说,Boot是一个很理想的选择;对于釆用 Spring技术的新人来说,Boot提供了一种极简的方式来使用这些技术。
作为当前主流的企业框架Spring,它提供了一整套相关的顶级项目,能让开发者快速 上手实现自己的应用。Spring Boot在整个Spring生态中的位置如图1-4所示。
微服务时代,从部署到服务器中改造为直接启动应用进程,内嵌一个Web容器。把所 需要的jar和应用代码全部打包到一个jar或者war中。如果打成可执行jar包,我们可以直 接通过java -jar example.war的方式来启动服务。
嵌入式Tomcat早就存在,Spring Boot支持内嵌Tomcat、Jetty和Undertow等Web服务器。 测试表明Undertow比Tomcat性能更好。类似于Wildfly-swarm等微服务框架,Spring Boot 拥有相似的架构和开发/构建方法。例如,Wildfly-swarm和Spring Boot的基础组件对比见表1.1。
表 1-1 Spring Boot 和 Wildfly-swarm 基础组件对比
| Spring Boot | Wildfly-swarm | |
|---|---|---|
| 注入服务(Bean管理) | SpringFramework 容器 | Weld CDI 容器 |
| Web容器 | 嵌入式的Tomcat和嵌入式的Undertow等 | 嵌入式的Undertow等 |
| Rest数据 | SpringMVC | JaxRS 实现的 RestEasy |
| 持久层 | 釆用JPA和Hibernate作为实现 | 釆用JPA和Hibernate作为实现 |
| 嵌入式的数据库 | HsqlDB和H2数据库 | HsqlDB和H2数据库 |
| 构建 | Maven、Gradle | Maven、Gradle |
1.2.2 Spring Boot核心模块
Spring Boot核心模块如图1-5所示。
1.spring-boot
Spring Boot核心工程。
2.starters
是Spring Boot的启动服务工程。spring-boot中内置提供的starter列表可以在Spring Boot项目源代码工程spring-boot/spring-boot-starters中看到。这些starters的使用例子,在 源码中的 spring-boot/spring-boot-samples 工程中。
3.autoconfigure
是Spring Boot实现自动配置的核心工程。
4.actuator
提供Spring Boot应用的外围支撑性功能。比如:应用状态监控管理、应用健康指示表、 远程shell支持、metrics支持等。
5.tools
提供了 Spring Boot 开发者的常用工具集。诸如,spring-boot-gradle-pluginspring-boot- maven-plugin 就在这个模块里面。
6.cli
是Spring Boot命令行交互工具,可用于使用Spring进行快速原型搭建。可以用它直接 运行 Groovy 脚本。如果你不喜欢 Maven 或 Gradle,可用 CLI ( Command Line Interface)来开发运行Spring应用程序。可以使用它来运行Groovy脚本,甚至编写自定义命令。
1.3 约定优于配置极简化理念
Spring Boot充分利用了 JavaConfig的配置模式以及"约定优于配置”(Convention Over Configuration, COC)的理念,极大地简化了基于Spring MVC的Web应用和REST服务的开发。
不用看那一堆带着无数尖括号的XML真的让人很神清气爽。用JavaConfig注解方式可以让人很容易明白配置代码中的关键信息。
1.4 本章小结
Spring Boot是一个名词,反过来念就是"Boot Spring" ,是一个动宾结构的词语,意 即:“起飞吧,Spring" ,这正是Spring Boot框架设计的初心所在。自始至终,Spring都 在努力使开发者能够“极简”“快速”地创建并开发应用。