《Spring 实战》-- 读书笔记
前言
Spring 5 的主要功能是对反应式编程的支持,包括 Spring WebFlux。这是一个全新的反应式 Web 框架,借鉴了 Spring MVC 的编程模型,允许开发人员创建伸缩性更好且耗用更少线程的 Web 应用程序。
部分摘要
@Configuration 注解会告知 Spring 这是一个配置类,会为 Spring 应用上下文提供 bean。这个配置类的方法使用 @Bean 注解进行了标注,表明这些方法所返回的对象会以 bean 的形式添加到 Spring 的应用上下文中。
Spring 应用上下文就是 spring 容器。
@WebMvcTest 注解。这是 Spring Boot 所提供的一个特殊测试注解,它会让这个测试在 Spring MVC 应用的上下文中执行。
Model 对象负责在控制器和展现数据的视图之间传递数据。
关于 JSP
JSP 并不需要在构建文件中添加任何特殊的依赖。这是因为 Servlet 容器本身(默认是Tomcat)会实现 JSP,因此不需要额外的依赖。
只有在将应用构建为 WAR 文件并部署到传统的 Servlet 容器中时,才能选择 JSP 方案。
如果你想要构建可执行的JAR文件,那么必须选择Thymeleaf、FreeMarker 或其他方案。
关于使用数据库
在处理关系型数据的时候,Java 开发人员有多种可选方案,其中最常见的是JDBC和JPA。
Spring 对 JDBC 的支持要归功于 JdbcTemplate 类。
较流行的几个Spring Data项目包括:
-
Spring Data JPA:基于关系型数据库进行JPA持久化。
-
Spring Data MongoDB:持久化到Mongo文档数据库。
-
Spring Data Neo4j:持久化到Neo4j图数据库。
-
Spring Data Redis:持久化到Redis key-value存储。
-
Spring Data Cassandra:持久化到Cassandra数据库。
为了将 Ingredient 声明为 JPA 实体,它必须添加 @Entity注解。它的 id 属性需要使用@Id注解,以便于将其指定为数据库中唯一标识该实体的属性。
JPA 需要实体有一个无参的构造器,Lombok 的@NoArgsConstructor注解能够帮助我们实现这一点。
编写 RESTful 控制器
@RestController注解有两个目的。首先,它是一个类似于 @Controller 和 @Service 的构造型注解,能够让类被组件扫描功能发现。
但是,与 REST 最密切相关之处在于,@RestController 注解会告诉 Spring,控制器中的所有处理器方法的返回值都要直接写入响应体中,而不是将值放到模型中并传递给一个视图以便于进行渲染。
@RestController 注解简化了 REST 控制器,使用它的话,处理器方法中就不需要添加 @ResponseBody注解了。
Spring 借助 @CrossOrigin注解让 CORS 的使用更加简单。正如我们所看到的,@CrossOrigin 允许来自任何域的客户端消费该 API。
启用超媒体
Spring HATEOAS 项目为 Spring 提供了超链接的支持。
@Relation注解能够帮助我们消除 JSON 字段名和 Java 代码中定义的资源类名之间的耦合。
启用数据后端服务
Spring Data REST 是 Spring Data 家族中的另外一个成员,它会为 Spring Data 创建的 repository 自动生成 REST API。
消费 REST 服务
Spring 应用可以采用多种方式来消费 REST API,包括以下几种方式:
-
RestTemplate:Spring核心框架提供的简单、同步 REST 客户端。
-
Traverson:Spring HATEOAS 提供的支持超链接、同步的 REST 客户端,其灵感来源于同名的 JavaScript 库。
-
WebClient:Spring 5 所引入的反应式、异步 REST 客户端。
Traverson 来源于 Spring Data HATEOAS 项目,是 Spring 应用中开箱即用的消费超媒体 API 的解决方案。这个基于 Java 的库灵感来源于同名的 JavaScript 库。
客户端可以使用 RestTemplate 针对 REST API 发送 HTTP 请求。
发送异步消息
Spring 提供的 3 种异步消息方案:
-
Java消息服务(Java Message Service,JMS)、
-
RabbitMQ
-
Apache Kafka
1、使用 JMS 发送消息:
Spring 通过基于模板的抽象为 JMS 功能提供了支持,这个模板就是 JmsTemplate。
Artemis 是重新实现的下一代 ActiveMQ,使 ActiveMQ 变成了遗留方案。
2、使用 RabbitMQ 和 AMQP:
在使用 Spring 发送和接收 RabbitMQ 消息之前,我们需要将 Spring Boot 的 AMQP starter 依赖添加到构建文件中
Spring 对 RabbitMQ 消息支持的核心是 RabbitTemplate。
Spring 提供了 RabbitListener 实现消息驱动的 RabbitMQbean,对应于 JmsListener。为了声明当消息抵达 RabbitMQ 队列时某个方法应该被调用,我们可以为 bean 的方法添加@RabbitListener注解。
3、使用 Kafka 的消息:
Kafka 设计为集群运行,从而能够实现很强的可扩展性。通过将主题在集群的所有实例上进行分区(partition),它能够具有更强的弹性。
RabbitMQ 主要处理 Exchange 中的队列,而 Kafka 仅使用主题实现消息的发布/订阅。
Kafka 主题会复制到集群的所有代理上。集群中的每个节点都会担任一个或多个主题的首领(leader),负责该主题的数据并将其复制到集群中的其他节点上。
KafkaTemplate 与 JmsTemplate 和 RabbitTemplate 另一个不同之处在于它没有提供接收消息的方法。这意味着在 Spring 中想要消费来自 Kafka 主题的消息只有一种办法,就是编写消息监听器。
对于 Kafka 消息来说,消息监听器是通过带有@KafkaListener注解的方法来实现的。@KafkaListener 大致对应于 @JmsListener 和 @RabbitListener,并且使用方式也基本相同。
小结:Spring 支持使用 JMS、RabbitMQ 或 Apache Kafka 实现异步消息。
每天学习一点点,每天进步一点点。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 《HelloGitHub》第 108 期
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单
· C# 13 中的新增功能实操
· Supergateway:MCP服务器的远程调试与集成工具