zoukankan      html  css  js  c++  java
  • 《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 实现异步消息。

    每天学习一点点,每天进步一点点。

  • 相关阅读:
    (八)CXF之用spring添加拦截器
    (七)CXF之与spring整合发布web服务
    (六)CXF之自定义拦截器
    借鉴mini2440的usb-wifi工具集在Beagleboard上移植无线网卡
    ubuntu设置网络
    mysql优化学习
    java日期转化
    Navicat使用
    (转载)windows下mysql忘记密码
    java读取文件乱码
  • 原文地址:https://www.cnblogs.com/youcoding/p/13831525.html
Copyright © 2011-2022 走看看