封面

版权信息

内容提要

译者序

关于本书

前言

致谢

资源与支持

第1部分 Spring基础

第1章 Spring起步

1.1 什么是Spring

NOTE

Spring的核心是提供了一个容器(container),通常称为Spring应用上下文(Spring application context),它们会创建和管理应用组件。这些组件也可以称为bean,会在Spring应用上下文中装配在一起,从而形成一个完整的应用程序。这就像砖块、砂浆、木材、管道和电线组合在一起,形成一栋房子似的。将bean装配在一起的行为是通过一种基于依赖注入(dependency injection,DI)的模式实现的。此时,组件不会再去创建它所依赖的组件并管理它们的生命周期,使用依赖注入的应用依赖于单独的实体(容器)来创建和维护所有的组件,并将其注入到需要它们的bean中。通常,这是通过构造器参数和属性访问方法来实现的。

2022-05-17 15:53:56

NOTE

在Spring技术中,自动配置起源于所谓的自动装配(autowiring)和组件扫描(component scanning)。借助组件扫描技术,Spring能够自动发现应用类路径下的组件,并将它们创建成Spring应用上下文中的bean。借助自动装配技术,Spring能够自动为组件注入它们所依赖的其他bean

2022-05-17 15:58:50

NOTE

自动配置就像风一样,你可以看到它的效果,但是我找不到代码指给你说,“看!这就是自动配置的样例!”事情发生了,组件启用了,功能也提供了,但是不用编写任何代码。没有代码就是自动装配的本质,也是它如此美妙的原因所在

2022-05-17 15:59:18

1.2 初始化Spring应用

NOTE

置属性的详细阐述放到第5章

2022-05-17 17:55:45

NOTE

我们选择了将应用构建成一个可执行的JAR文件,而不是WAR文件。这可能是你所做出的最奇怪的选择之一,对Web应用来说尤为如此。毕竟,传统的Java Web应用都是打包成WAR文件,JAR只是用来打包库和较为少见的桌面UI应用的。

2022-05-17 18:14:41

NOTE

打包为JAR文件是基于云思维做出的选择。尽管WAR文件非常适合部署到传统的Java应用服务器上,但对于大多数云平台来说它们并不是理想的选择。有些云平台(比如Cloud Foundry)也能够部署和运行WAR文件,但是所有的Java云平台都能够运行可执行的JAR文件。因此,Spring Initializr默认会使用基于JAR的打包方式,除非我们明确告诉它采用其他的方式。

2022-05-17 18:14:56

NOTE

注意这个类带有@RunWith(SpringRunner.class)注解。@RunWith是JUnit的注解,它会提供一个测试运行器(runner)来指导JUnit如何运行测试。可以将其想象为给JUnit应用一个插件,以提供自定义的测试行为。在本例中,为JUnit提供的是SpringRunner,这是一个Spring提供的测试运行器,它会创建测试运行所需的Spring应用上下文

2022-05-17 18:43:48

NOTE

SpringRunner是SpringJUnit4ClassRunner的别名,是在Spring 4.3中引入的,以便于移除对特定JUnit版本的关联(比如,JUnit 4)。毫无疑问,这个别名更易于阅读和输入

2022-05-17 18:44:51

1.3 编写Spring应用

NOTE

•一个控制器类,用来处理主页相关的请求;•一个视图模板,用来定义主页看起来是什么样子。

2022-05-17 18:46:49

NOTE

Spring自带了一个强大的Web框架,名为Spring MVC。Spring MVC的核心是控制器(controller)的理念。控制器是处理请求并以某种方式进行信息响应的类。在面向浏览器的应用中,控制器会填充可选的数据模型并将请求传递给一个视图,以便于生成返回给浏览器的HTML。

2022-05-17 18:47:07

NOTE

有一些其他的注解与@Controller有着类似的目的(包括@Component、@Service和@Repository)

2022-05-17 19:01:59

NOTE

你可能会想为什么要选择Thymeleaf作为模板引擎呢?为何不使用JSP?为何不使用FreeMarker?为何不选择其他的几个可选方案?

2022-05-17 21:01:07

NOTE

Spring Boot应用的习惯做法是将所有它需要的东西都放到一起,没有必要将其部署到某种应用服务器中。在这个过程中,我们根本没有将应用部署到Tomcat中……Tomcat是我们应用的一部分!

2022-05-17 21:25:01

NOTE

代码变更后应用会自动重启;•当面向浏览器的资源(如模板、JavaScript、样式表)等发生变化时,会自动刷新浏览器;•自动禁用模板缓存;•如果使用H2数据库的话,内置了H2控制台。

2022-05-17 21:33:51

NOTE

当探测到变更的时候,DevTools只会重新加载包含项目代码的类加载器,并重启Spring的应用上下文,在这个过程中另外一个类加载器和JVM会原封不动。这个策略非常精细,但是它能减少应用启动的时间。

2022-05-17 21:34:26

NOTE

自动重启无法反映依赖项的变化。这是因为包含依赖库的类加载器不会自动重新加载

2022-05-17 21:34:38

NOTE

这意味着每当我们在构建规范中添加、变更或移除依赖的时候,为了让变更生效,我们需要重新启动应用

2022-05-17 21:34:49

1.4 俯瞰Spring风景线

NOTE

Spring核心框架是Spring领域中一切的基础。它提供了核心容器和依赖注入框架,另外还提供了一些其他重要的特性

2022-05-17 21:35:51

NOTE

Spring MVC,也就是Spring的Web框架。你已经看到了如何使用Spring MVC来编写控制器类以处理Web请求

2022-05-17 21:36:00

NOTE

Spring MVC还能用来创建REST API,以生成非HTML的输出。在第2章中,我们将会更深入地介绍Spring MVC,并在第6章重新学习如何使用它来创建REST API

2022-05-17 21:36:10

NOTE

我们会尽可能多地使用Spring Boot,并避免任何形式的显式配置

2022-05-17 21:36:39

NOTE

Spring Boot还提供了一个基于Groovy脚本的编程模型,称为Spring Boot命令行接口(Command-Line Interface,CLI)。使用Spring Boot CLI,我们可以将整个应用程序编写为Groovy脚本的集合,并通过命令行运行它们

2022-05-17 21:36:54

NOTE

Spring Data能够处理多种不同类型的数据库,包括关系型数据库(JPA)、文档数据库(Mongo)、图数据库(Neo4j)

2022-05-17 21:37:05

NOTE

集成

2022-05-17 21:37:28

1.5 小结

第2章 开发Web应用

2.1 展现信息

NOTE

。这个方法构建了一个Ingredient对象的列表。现在,这个列表是硬编码的

2022-05-18 10:59:48

NOTE

将请求传递给视图

2022-05-18 11:00:58

NOTE

数据将会使用HTML进行装饰,以便于在用户的Web浏览器中进行展现。

2022-05-18 11:00:38

NOTE

“th:text”是Thymeleaf命名空间中的属性,它会执行这个替换过程。${}会告诉它要使用某个请求属性

2022-05-18 11:07:02

2.2 处理表单提交

2.3 校验表单输入

2.4 使用视图控制器

2.5 选择视图模板库

2.6 小结

第3章 使用数据

3.1 使用JDBC读取和写入数据

3.2 使用Spring Data JPA持久化数据

3.3 小结

第4章 保护Spring

4.1 启用Spring Security

4.2 配置Spring Security

NOTE

使用bcrypt强哈希加密。

2022-08-05 10:01:49

4.3 保护Web请求

4.4 了解用户是谁

4.5 小结

第5章 使用配置属性

5.1 细粒度的自动配置

5.2 创建自己的配置属性

5.3 使用profile进行配置

5.4 小结

第2部分 Spring集成

第6章 创建REST服务

6.1 编写RESTful控制器

6.2 启用超媒体

6.3 启用数据后端服务

6.4 小结

第7章 消费REST服务

7.1 使用RestTemplate消费REST端点

7.2 使用Traverson导航REST API

7.3 小结

第8章 发送异步消息

8.1 使用JMS发送消息

8.2 使用RabbitMQ和AMQP

8.3 使用Kafka的消息

8.4 小结

第9章 Spring集成

9.1 声明一个简单的集成流

NOTE

为了实现这一点,我们需要创建一个网关接口,这样的网关接口如程序清单9.1所示。

程序清单9.1 将方法调用转换成消息的消息网关接口

package sia5;

import org.springframework.integration.annotation.MessagingGateway;

import org.springframework.integration.file.FileHeaders;

import org.springframework.messaging.handler.annotation.Header;

@MessagingGateway(defaultRequestChannel=“textInChannel”) ⇽--- 声明消息网关

public interface FileWriterGateway {

 void writeToFile(

     @Header(FileHeaders.FILENAME) String filename,    ⇽--- 写入文件

     String data);

}

尽管这只是一个很简单的Java接口,但是FileWriterGateway有很多东西需要介绍。

2023-07-27 09:22:38

9.2 Spring Integration功能概览

9.3 创建Email集成流

9.4 小结

第3部分 反应式Spring

第10章 理解反应式编程

10.1 反应式编程概览

10.2 初识Reactor

10.3 使用常见的反应式操作

10.4 小结

第11章 开发反应式API

11.1 使用Spring WebFlux

11.2 定义函数式请求处理器

11.3 测试反应式控制器

11.4 反应式消费REST API

11.5 保护反应式Web API

11.6 小结

第12章 反应式持久化数据

12.1 理解Spring Data的反应式概况

12.2 使用反应式的Cassandra repository

12.3 编写反应式的MongoDB repository

12.4 小结

第4部分 云原生Spring

第13章 注册和发现服务

13.1 思考微服务

13.2 搭建服务注册中心

13.3 注册和发现服务

13.4 小结

第14章 管理配置

14.1 共享配置

14.2 运行配置服务器

14.3 消费共享配置

14.4 提供特定应用和profile的属性

14.5 保持配置属性的私密性

14.6 在运行时刷新配置属性

14.7 小结

第15章 处理失败和延迟

15.1 理解断路器模式

15.2 声明断路器

15.3 监控失败

15.4 聚合多个Hystrix流

15.5 小结

第5部分 部署Spring

第16章 使用Spring Boot Actuator

16.1 Actuator概览

16.2 消费Actuator端点

16.3 自定义Actuator

16.4 保护Actuator

16.5 小结

第17章 管理Spring

17.1 使用Spring Boot Admin

17.2 探索Admin服务器

17.3 保护Admin服务器

17.4 小结

第18章 使用JMX监控Spring

18.1 使用Actuator MBean

18.2 创建自己的MBean

18.3 发送通知

18.4 小结

第19章 部署Spring

19.1 权衡各种部署方案

19.2 构建和部署WAR文件

19.3 推送JAR文件到Cloud Foundry上

19.4 在Docker容器中运行Spring Boot

19.5 以终为始

19.6 小结

附录 初始化Spring应用

A.1 使用Spring Tool Suite初始化项目

A.2 使用IntelliJ IDEA初始化项目

A.3 使用NetBeans初始化项目

A.4 在start.spring.io中初始化项目

A.5 使用命令行初始化项目

A.6 使用元框架创建Spring应用

A.7 构建和运行项目