封面
版权信息
内容提要
译者序
关于本书
前言
致谢
资源与支持
第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