spring实战第5版中⽂_Spring中的新华字典,全球10万+开发
者使⽤的《Sprin。。。
《Spring实战》第5版本书是⼀本经典⽽实⽤的畅销Spring学习指南。这本书就相当于是关于Spring的新华字典,第5版涵盖了Spring
5.0和Spring Boot 2.0⾥程碑式的更新。全书分为5个部分,共19章。第1部分(第1~5章)涵盖了构建Spring应⽤的基础话题。第2部分(第6~9章)讨论如何将Spring应⽤与其他应⽤进⾏集成。第3部分(第10~12章)探讨Spring对反应式编程提供的全新⽀持。第4部分(第13~15章)拆分单体应⽤模型,介绍Spring Cloud和微服务开发。第5部分(第16~19章)讨论如何为应⽤投⼊⽣产环境做准备以及如何进⾏部署。
Spring 5更新了哪些内容?
Spring 5的主要功能是对反应式编程的⽀持,包括Spring WebFlux。
Spring 5的主要功能是对反应式编程的⽀持,包括Spring WebFlux。这是⼀个全新的反应式Web框架,借鉴了Spring MVC的编程模型,允许开发⼈员创建伸缩性更好且耗⽤更少线程的Web应⽤程序。⾄于Spring应⽤的后端,最新版本的Spring Data⽀持创建反应式、⾮阻塞的数据repository。所有这些都构建在Reactor项⽬之上,Reactor是⼀个⽤于处理反应式类型的Java库。
除了Spring 5新的反应式编程特性之外,Spring Boot 2提供了⽐以前更多的⾃动配置⽀持,以及⼀个完全重新设计的
Actuator,⽤于探查和操作正在运⾏的应⽤。
更重要的是,当开发⼈员希望将单体应⽤拆分为分散的微服务时,Spring Cloud提供了⼀些⼯具,使配置和发现微服务变得容易,并增强了微服务的功能,使它们更能抵御失败。
针对学习者的建议
如果你是经验丰富的⽼⼿,《Spring实战(第5版)》可以作为指南,指导你去学习Spring提供的新功能;如果你是Spring新⼿,那么现在是⾏动起来的最佳时机,本书的前⼏章会让你快速上⼿!
《Spring实战》(第5版)学习路线图
本书分成了5个部分,共计19章。
第1部分涵盖构建Spring应⽤的基础话题。
第1章介绍Spring和Spring Boot以及如何初始化Spring项⽬。在本章中,我们迈出构建Spring应⽤的第⼀步,在本书后续各章中,我们会对这个应⽤进⾏扩展。
第2章讨论如何使⽤Spring MVC构建应⽤的Web层。在本章中,我们将会构建处理Web请求的控制器以及在浏览器中渲染信息的视图。
第3章会深⼊探讨Spring应⽤的后端,在这⾥数据会持久化到关系型数据库中。
在第4章中,我们会使⽤Spring Security认证⽤户并防⽌未认证的⽤户访问应⽤。
第5章介绍如何使⽤Spring Boot的配置属性功能来配置Spring应⽤。我们还会学习如何使⽤profile选择性地应⽤配置。
第2部分讨论如何将Spring应⽤与其他应⽤进⾏集成。
第6章延续第2章对Spring MVC的讨论,我们将会学习如何在Spring中编写REST API。
第7章讨论和第6章相对⽴的主题,展现Spring应⽤如何消费REST API。
第8章会讨论如何使⽤异步通信技术让Spring应⽤发送和接收消息,这⾥会⽤到Java Message Service、RabbitMQ或Kafka。
第9章讨论如何使⽤Spring Integration进⾏声明式的应⽤集成。
第3部分探讨Spring对反应式编程提供的全新⽀持。
第10章介绍Reactor项⽬。这是⼀个反应式编程库,⽀撑了Spring 5的反应式特性。
第11章重新探讨REST API开发,介绍全新的Web框架Spring WebFlux。该框架借⽤了很多Spring MVC的理念,但是为Web开发提供了新的反应式模型。
第12章将会看⼀下如何使⽤Spring Data编写反应式数据持久化,我们将会读取和写⼊Cassandra与Mongo数据库。
第4部分将会拆分单体应⽤模型,介绍Spring Cloud和微服务开发。
第13章会深⼊介绍服务发现,组合使⽤Spring和Netflix的注册中⼼实现Spring微服务的注册和发现。
第14章将展现如何在配置服务器中实现中⼼化的应⽤配置,从⽽实现跨微服务共享配置。
第15章会介绍Hystrix的断路器模式。它能够让微服务在⾯临失败时更有弹性。
在第5部分中,我们将会讨论如何做好将应⽤投⼊⽣产环境的准备,并看⼀下如何进⾏部署。
第16章会介绍Spring Boot Actuator。它是Spring Boot的⼀个扩展,通过REST端点的形式暴露Spring
应⽤内部的运⾏状况。
第17章将会介绍如何使⽤Spring Boot Admin。它是构建在Actuator之上的⼀个⽤户友好的基于浏览器的管理应⽤。
第18章将会讨论如何将Spring bean暴露为JMX MBean以及如何消费它们。
在第19章中,我们会看到如何将Spring应⽤部署到各种⽣产环境中。
通常来讲,刚刚接触Spring的开发⼈员应该从第1章开始,并按顺序阅读每⼀章;经验丰富的Spring开发⼈员可能更愿意在任何感兴趣的时候参与进来。即便如此,每⼀章都是建⽴在前⼀章的基础上的,所以如果从中间开始阅读,那么可能会漏掉⼀些上下⽂信息。
样章试读:第2章 开发Web应⽤
本章内容:
本章内容:
在浏览器中展现模型数据
处理和校验表单输⼊
选择视图模板库
第⼀印象是⾮常重要的:Curb Appeal能够在购房者真正进门之前就将房⼦卖掉;如果⼀辆车喷成了樱桃⾊,那么它的油漆会⽐它的引擎更引⼈注⽬;⽂学作品中充满了⼀见钟情的故事。内在固然⾮常重要,但是外在的,也就是第⼀眼看到的东西同样⾮常重要。
我们使⽤Spring所构建的应⽤会完成各种各样的事情,包括处理数据、从数据库中读取信息以及与其他应⽤进⾏交互。但是,⽤户对应⽤程序的第⼀印象来源于⽤户界⾯。在很多应⽤中,UI是以浏览器中的Web应⽤的形式来展现的。
在第1章中,我们创建了第⼀个Spring MVC控制器来展现应⽤的主页。但是,Spring MVC能做很多的事情,并不局限于展现静态内容。在本章中,我们将会开发Taco Cloud的第⼀个主要功能:设计定制taco的能⼒。在这个过程中,我们将会深⼊研究Spring MVC并会看到如何展现模型数据和处理表单输⼊。
2.1 展现信息
从根本上来讲,Taco Cloud是⼀个可以在线订购taco的地⽅。但是,除此之外,Taco Cloud允许客户
展现其创意,能够让他们通过丰富的配料(ingredient)设计⾃⼰的taco。
因此,Taco Cloud需要有⼀个页⾯为taco艺术家展现都可以选择哪些配料。可选的配料可能随时会发⽣变化,所以不能将它们硬编码到HTML页⾯中。我们应该从数据库中获取可⽤的配料并将其传递给页⾯,进⽽展现给客户。
在Spring Web应⽤中,获取和处理数据是控制器的任务,⽽将数据渲染到HTML中并在浏览器中展现则是视图的任务。为了⽀撑taco的创建页⾯,我们需要构建如下组件。
⽤来定义taco配料属性的领域类。
⽤来获取配料信息并将其传递⾄视图的Spring MVC控制器类。
⽤来在⽤户的浏览器中渲染配料列表的视图模板。
这些组件之间的关系如图2.1所⽰。
图2.1 典型的Spring MVC请求流
因为本章主要关注Spring的Web框架,所以我们会将数据库相关的内容放到第3章中进⾏讲解。现在的控制器只负责向视图提供配料。在第3章中,我们会重新改造这个控制器,让它能够与repository协作,从数据库中获取配料数据。
在编写控制器和视图之前,我们⾸先确定⼀下⽤来表⽰配料的领域类型,它会为我们开发Web组件奠定基础。
2.1.1 构建领域类
应⽤的领域指的是它所要解决的主题范围:也就是会影响到对应⽤理解的理念和概念[1]。在Tao Cloud应⽤中,领域对象包括taco设计、组成这些设计的配料、顾客以及顾客所下的订单。作为开始,我们⾸先关注taco的配料。
在我们的领域中,taco配料是⾮常简单的对象。每种配料都有⼀个名称和类型,以便于对其进⾏可视化的分类(蛋⽩质、奶酪、酱汁等)。每种配料还有⼀个ID,这样的话对它的引⽤就能⾮常容易和明确。如下的Ingredient类定义了我们所需的领域对象。
程序清单2.1 定义taco配料
package tacos;
import lombok.Data;
import lombok.RequiredArgsConstructor;
@Data
@RequiredArgsConstructor
public class Ingredient {
private final String id;
private final String name;
private final Type type;
public static enum Type {
WRAP, PROTEIN, VEGGIES, CHEESE, SAUCE
}
}
我们可以看到,这是⼀个⾮常普通的Java领域类,它定义了描述配料所需的3个属性。在程序清单2.1
中,Ingredient类最不寻常的⼀点是它似乎缺少了常见的getter和setter⽅法,以及equals()、hashCode()、toString()等⽅法。
在程序清单中没有这些⽅法,部分原因是节省空间,另外还因为我们使⽤了名为Lombok的库(这是⼀个⾮常棒的库,它能够在运⾏时动态⽣成这些⽅法)。实际上,类级别的@Data注解就是由Lombok提供的,它会告诉Lombok⽣成所有缺失的⽅法,同时还会⽣成所有以final属性作为参数的构造器。通过使⽤Lombok,能够让Ingredient的代码简洁明了。
Lombok并不是Spring库,但是它⾮常有⽤,我发现如果没有它,开发⼯作将很难开展。当我需要在书中将代码⽰例编写得短⼩简洁时,它简直成了我的救星。
要使⽤Lombok,⾸先要将其作为依赖添加到项⽬中。如果你使⽤Spring Tool Suite,那么只需要⽤右键点击l,并从Spring上下⽂菜单选项中选择“Edit Starters”。在第1章中看到的选择依赖的对话框将会再次出现(见图1.4),这样的话我们就有机会添加依赖或修改已选择的依赖了。到Lombok选项,并确保它处于已选中的状态,然后点击“OK”,Spring Tool Suite会⾃动将其添加到构建规范中。
另外,你也可以在l中通过如下条⽬进⾏⼿动添加:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
这个依赖将会在开发阶段为你提供Lombok注解(例如@Data),并且会在运⾏时进⾏⾃动化的⽅法⽣成。但是,我们还需要将Lombok作为扩展添加到IDE上,否则IDE将会报错,提⽰缺少⽅法和final属性没有赋值。参见Lombok项⽬页⾯,以查阅如何在你所选择的IDE上安装Lombok。
我相信你会发现Lombok⾮常有⽤,但你也要知道,它是可选的。在开发Spring应⽤的时候,它并不是必备的,所以如果你不想使⽤它的话,完全可以⼿动编写这些缺失的⽅法。当你完成之后,我们将会在应⽤中添加⼀些控制器,让它们来处理Web请求。
2.1.2 创建控制器类
在Spring MVC框架中,控制器是重要的参与者。它们的主要职责是处理HTTP请求,要么将请求传递给视图以便于渲染HTML(浏览器展现),要么直接将数据写⼊响应体(RESTful)。在本章中,我们
将会关注使⽤视图来为Web浏览器⽣成内容的控制器。在第6章中,我们将会看到如何以REST API的形式编写控制器来处理请求。
对于Taco Cloud应⽤来说,我们需要⼀个简单的控制器,它要完成如下功能。
处理路径为“/design”的HTTP GET请求。
构建配料的列表。
处理请求,并将配料数据传递给要渲染为HTML的视图模板,发送给发起请求的Web浏览器。
程序清单2.2中的DesignTacoController类解决了这些需求。
程序清单2.2 初始的Spring控制器类
package tacos.web;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import javax.validation.Valid;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
slf4j.Slf4j;
import tacos.Taco;
import tacos.Ingredient;
import tacos.Ingredient.Type;
@Slf4j
@Controller
@RequestMapping("/design")
public class DesignTacoController {
@GetMapping
public String showDesignForm(Model model) {
List<Ingredient> ingredients = Arrays.asList(
new Ingredient("FLTO", "Flour Tortilla", Type.WRAP),
new Ingredient("COTO", "Corn Tortilla", Type.WRAP),
new Ingredient("GRBF", "Ground Beef", Type.PROTEIN),
new Ingredient("CARN", "Carnitas", Type.PROTEIN),
new Ingredient("TMTO", "Diced Tomatoes", Type.VEGGIES),
new Ingredient("LETC", "Lettuce", Type.VEGGIES),
new Ingredient("CHED", "Cheddar", Type.CHEESE),
new Ingredient("JACK", "Monterrey Jack", Type.CHEESE),
new Ingredient("SLSA", "Salsa", Type.SAUCE),
new Ingredient("SRCR", "Sour Cream", Type.SAUCE)
);
Type[] types = Ingredient.Type.values();
for (Type type : types) {
model.String().toLowerCase(),
filterByType(ingredients, type));
}
model.addAttribute("design", new Taco());
return "design";
}
}
springcloud难学吗对于DesignTacoController,我们先要注意在类级别所应⽤的注解。⾸先是@Slf4j,这是Lombok所提供的注解,在运⾏时,它会在这个类中⾃动⽣成⼀个SLF4J(Simple Logging Facade for Java)Logger。这个简单的注解和在类中通过如下代码显式声明的效果是⼀样的:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。