您好,欢迎光临有路网!
Spring Boot开发实战-微课视频版
QQ咨询:
有路璐璐:

Spring Boot开发实战-微课视频版

  • 作者:吴胜
  • 出版社:清华大学出版社
  • ISBN:9787302528197
  • 出版日期:2019年07月01日
  • 页数:312
  • 定价:¥59.90
  • 分享领佣金
    手机购买
    城市
    店铺名称
    店主联系方式
    店铺售价
    库存
    店铺得分/总交易量
    发布时间
    操作

    新书比价

    网站名称
    书名
    售价
    优惠
    操作

    图书详情

    • 出版社
    • ISBN
      9787302528197
    • 作者
    • 页数
      312
    • 出版时间
      2019年07月01日
    • 定价
      ¥59.90
    • 所属分类
    内容提要
    本书先逐步介绍Spring Boot开发的基础知识;包括Spring Boot的简介、开发起步、相关注解介绍和Web应用开发、数据库访问、数据库访问、Web服务开发、数据处理、文件应用、WebFlux开发以及示例代码。然后结合一个简单案例演示了Spring Boot开发的全过程。本书内容由浅入深,结合示例介绍各个知识点,按照开发步骤的方式组织内容;可以帮助读者更好地理解、掌握Spring Boot开发技术。 本书内容通俗易懂,适合Spring Boot开发的初学者(特别是在校学生)、Web应用***和企业级应用开发爱好者等读者;可以作为大学课程的教学用教材、自学的入门读物、开发过程的参考书。
    文章节选
    第3章
    Spring Boot的相关注解
    对第1章中例1-1的代码进行分析,可以知道注解(Annotation)在Spring Boot开发中占有重要的地位。注解为在代码中添加信息提供了一种形式化的方法,通过注解可以很方便地在代码中某个地方使用被注解的对象。注解常见的作用包括生成文档、跟踪代码依赖性和替代配置文件、在编译时进行格式检查(如@Override 放在方法前)等。
    为了帮助读者更好地理解后面章节的示例代码,本章介绍Spring Boot注解以及和Spring Boot注解密切相关的Java注解、Spring注解等内容。
    3.1 Java注解
    JRE的库包 java.lang.annotation中代码包括注解相关的接口、类等内容。接口 java.lang.annotation.Annotation是所有自定义注解自动继承的接口,不需要定义时指定,类似于所有Java类都自动继承的Object类。
    3.1.1 Java注解的介绍
    注解是一系列元数据,它利用元数据来解释、说明程序代码(即被注解的对象)。但是,注解不是所标注的代码的组成部分。注解对于代码的运行效果没有直接影响。注解的作用包括:
    (1) 提供信息给编译器,编译器可以利用注解来探测错误和警告信息。
    (2) 软件工具可以利用注解信息来生成代码、HTML文档或者做其他相应处理。
    (3) 运行时的处理,某些注解可以在程序运行时接受代码的提取。
    在开始学习注解具体语��之前,可以把注解看成一张标签。与接口和类一样,注解也是一种类型。注解是自Java 1.5开始引入的概念,它允许***定义自己的注解类型和使用自定义的注解。注解通过关键字@interface进行定义,代码如例3-1所示。
    【例3-1】 注解定义的代码示例。

    public @interface TestAnnotation {
    }


    例3-1中的代码自定义了一个名字为 TestAnnotaion 的注解,该注解自动继承了类java.lang.annotation.Annotation。创建了自定义注解后,就可以使用自定义的注解。注解的使用方法如例3-2所示。
    【例3-2】 使用自定义注解的代码示例。

    @TestAnnotation
    public class Test {
    }


    例3-2创建了一个类Test,并在类定义的上方加上了@TestAnnotation注解,就意味着用TestAnnotation注解了类Test。
    3.1.2 Java的元注解
    要想更好地使用注解,还需要理解元注解。元注解是加到注解上的注解,它的目的是解释、说明其他普通注解。元注解有@Retention、@Documented、@Target、@Inherited、@Repeatable共5种。
    元注解@Retention应用到一个注解时,说明该注解的存活时间。它的取值包括RetentionPolicy.SOURCE、RetentionPolicy.CLASS、RetentionPolicy.RUNTIME。其中,RetentionPolicy.SOURCE表明注解只在源码阶段保留,在编译器进行编译时被丢弃。RetentionPolicy.CLASS表明注解被保留到编译进行的时候,而不会被加载到 JVM 中。RetentionPolicy.RUNTIME表明注解可以保留到程序运行的时候,它会被加载进入JVM中;在程序运行时可以获取到它们。
    应用元注解@Retention的代码示例如例3-3所示,在该示例中设定注解TestAnnotation 可以在程序运行时被获取到。
    【例3-3】 应用元注解@Retention的代码示例。

    @Retention(RetentionPolicy.RUNTIME)
    public @interface TestAnnotation {
    }


    元注解@Documented表示注解内容会被Javadoc工具提取成文档,文档内容会因为注解内容的不同而不同。
    元注解@Target表示注解用于什么地方,如类型、方法和域等。元注解@Target的取 值包括ElementType.FIELD、ElementType.METHOD、ElementType.PARAMETER、ElementType.CONSTRUCTOR、ElementType.LOCAL_VARIABLE、ElementType.TYPE、ElementType.ANNOTATION_TYPE、ElementType.PACKAGE。其中,ElementType.FIELD表示对字段、枚举常量的注解,ElementType.METHOD表示对方法的注解,ElementType.PARAMETER表示对方法参数的注解,ElementType.CONSTRUCTOR表示对构造函数的注解,ElementType.LOCAL_VARIABLE表示对局部变量的注解,ElementType.ANNOTATION_TYPE表示对注解类型的注解,ElementType.PACKAGE表示对包的注解,ElementType.TYPE表示对接口、类、枚举、注解等任意类型的注解。
    被元注解@Inherited注解过的注解作用于父类后,子类会自动继承父类的注解。应用的示例代码如例3-4所示。
    【例3-4】 应用元注解@Inherited的代码示例。

    //该示例由3部分组成
    //定义注解
    @Inherited
    @Retention(RetentionPolicy.RUNTIME)
    @interface Test {}

    //在父类中增加注解
    @Test
    public class A {}

    //子类B虽然没有明确给出注解信息,但是它会继承父类A中的注解@Test
    public class B extends A {}


    元注解@Repeatable是在Java 1.8中引入的注解,其应用的示例代码如例3-5所示。Persons 可以被看作是一张总标签,上面贴满了 Person 这种同类型但内容不一样的标签。于是,可以同时给 SuperMan 贴上画家、程序员、产品经理等标签(即加上3个注解)。
    【例3-5】 应用元注解@Repeatable的代码示例。

    //Persons是用数组存放注解的容器注解,它里面必须要有一个 value 属性,即数组
    @interface Persons {
    Person[] value();
    }
    //可以重复、多次应用Persons注解
    @Repeatable(Persons.class)
    @interface Person{
    String role default "";
    }
    //不同属性的Person注解
    @Person(role="artist")
    @Person(role="coder")
    @Person(role="PM")
    public class SuperMan{
    }


    注解中可以拥有属性(也叫作成员变量),示例代码如例3-6所示。表示自定义的注解 TestAnnotation注解拥有 id 和 msg 两个属性,返回类型分别为int和String。
    【例3-6】 带属性的注解代码示例。

    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface TestAnnotation {
    int id();
    String msg();
    }


    使用注解时,应该给属性赋值。属性的赋值方法是在注解后面的括号内以“属性=取值”的形式进行的,多个属性的赋值之间用逗号隔开,示例代码如例3-7所示。需要注意的是,注解中属性的类型只能是 8 种基本数据类型和类、接口、注解及它们的数组。
    【例3-7】 给注解属性赋值的应用代码示例。

    @TestAnnotation(id=3,msg="hello annotation")
    public class Test {
    }


    注解中属性可以有默认值,默认值需要用关键字 default 指定,示例代码如例3-8所示。注解TestAnnotation 中属性id 的默认值被指定为 ?1,属性msg的默认值被指定为"Hi"。
    【例3-8】 给注解属性指定默认值的代码示例。

    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface TestAnnotation {
    public int id() default -1;
    public String msg() default "Hi";
    }


    假如指定了属性默认值,可以不用再在注解TestAnnotation 后面的括号内对属性进行赋值。示例代码如例3-9所示。
    【例3-9】 属性有默认值的注解应用代码示例。

    @TestAnnotation()
    public class Test {}


    如果注解只有一个属性时,应用这个注解时则可以省略属性名而将属性值直接填写到注解后面的括号内,如例3-10所示。
    【例3-10】 单一属性注解简单应用的代码示例。

    @Check("hi")
    int a;


    例3-11代码和例3-10代码的效果是一样的。
    【例3-11】 单一属性注解完整应用的代码示例。

    @Check(value="hi")
    int a;

    如果一个注解没有任何属性,应用这个注解时注解后面的括号则可以省略,如例3-12所示。
    【例3-12】 无属性注解的应用代码示例。

    @Perform
    public void testMethod(){}

    3.1.3 Java预置的基本注解
    在java.lang包下,Java预先提供了@Deprecated、@SuppressWarnings、@Override、@SafeVarargs、@FunctionalInterface共5个基本注解。
    注解@Deprecated是用来标记过时的元素。编译器在编译阶段遇到这个注解时会发出提醒警告,告诉***正在调用一个过时的元素(如过时的方法、类、成员变量)。
    注解@SuppressWarnings表示阻止警告的意思。使用@Deprecated 注解后,编译器有时会给***发出警告提醒;当***想忽略警告提醒时,可以通过 @SuppressWarnings 注解达到目的。@SuppressWarnings的参数有deprecation(表示忽略使用了过时元素时的警告)、unchecked(表示忽略执行了未检查转换时的警告)、fallthrough(表示忽略 switch 程序块直接通往下一种情况而没有break 时的警告)、path(表示忽略类路径、源文件路径等路径中有不存在的路径时的警告)、serial(表示忽略可序列化的类缺少 serialVersionUID 定义时的警告)、finally(表示忽略任何 finally 子句不能正常完成时的警告)、all(表示忽略关于所有情况的警告)。
    注解@Override表示子类要重写父类(或接口)的对应方法。如果想重写父类的方法,如toString()方法,则在方法前面加上@Override,系统可以帮助检查方法的正确性。示例代码如例3-13所示。
    【例3-13】 注解@Override的应用代码示例。

    //@Override可以帮助检查方法的正确性
    @Override
    public String toString(){...} //这是子类方法正确的写法

    //下面子类方法是错误的,有@Override,系统可以帮助检查出tostring的拼写错误
    @Override
    public String tostring(){...}

    //下面子类方法是错误的,由于没有@Override,系统不会帮助检查出tostring的拼写错误
    public String tostring(){...}


    注解@SafeVarargs被用来标识参数**类型,它被用来提醒***不要用参数做一些不**的操作,它的存在会阻止编译器产生 unchecked 这样的警告。它是在 Java 1.7 中引入的注解。
    注解@FunctionalInterface被用来指定某个接口必须是函数式接口,否则就会编译出错。@FunctionalInterface是 Java 1.8 引入的新特性。如果接口中有且只有一个抽象方法(可以包含多个默认方法或多个static方法),该接口称为函数式接口。
    目录
    目录 第1章 Spring Boot简介 1 1.1 Spring Boot的发展背景 1 1.1.1 Spring的发展 1 1.1.2 Spring的生态圈 2 1.1.3 Spring Boot的发展 3 1.2 Spring Boot的特征 4 1.2.1 Spring Boot的特点 4 1.2.2 Spring Boot 2的新特性 4 1.2.3 Spring Boot 2的核心模块 5 1.3 Spring Boot的工作机制 7 1.3.1 Spring Boot应用启动入口类的分析 7 1.3.2 Spring Boot 2的幕后工作 8 1.3.3 SpringApplication的执行流程 8 1.3.4 Spring Boot应用启动时控制台输出信息 9 习题1 9 第2章 Spring Boot开发起步 10 2.1 配置开发环境 10 2.1.1 安装JDK 10 2.1.2 安装IntelliJ IDEA 11 2.1.3 安装Spring Tool Suite 11 2.2 创建项目 13 2.2.1 利用IDEA创建项目 13 2.2.2 利用STS创建项目 16 2.3 实现Hello World的Web应用 17 2.3.1 用IDEA实现Hello World的Web应用 17 2.3.2 用STS实现Hello World的Web应用 19 2.4 以Hello World应用为例说明项目属性配置 19 2.4.1 配置项目内置属性 19 2.4.2 自定义属性设置 20 2.4.3 利用自定义配置类进行属性设置 21 2.5 Spring Boot开发的一般步骤 23 2.5.1 软件生命周期 23 2.5.2 Spring Boot开发步骤 24 习题2 24 第3章 Spring Boot的相关注解 26 3.1 Java注解 26 3.1.1 Java注解的介绍 26 3.1.2 Java的元注解 27 3.1.3 Java预置的基本注解 30 3.2 Spring注解及注解注入 31 3.2.1 Spring基础注解 31 3.2.2 Spring常见注解 31 3.2.3 Spring的注解注入 35 3.3 Spring Boot的注解 36 3.3.1 Spring Boot基础注解 36 3.3.2 JPA注解 37 3.3.3 异常处理注解 38 3.3.4 注解配置解析和使用环境 38 习题3 39 第4章 Spring Boot的Web应用开发 40 4.1 实现静态Web页面 40 4.1.1 创建类GreetingController 40 4.1.2 创建文件index.html 41 4.1.3 运行程序 41 4.2 实现基于Thymeleaf的Web应用 42 4.2.1 添加依赖 42 4.2.2 修改类GreetingController 42 4.2.3 创建文件hi.html 43 4.2.4 运行程序 43 4.3 Thymeleaf的语法与使用 44 4.3.1 Thymeleaf基础知识 44 4.3.2 Thymeleaf的标准表达式 44 4.3.3 Thymeleaf的表达式对象 45 4.3.4 Thymeleaf设置属性 46 4.3.5 Thymeleaf的迭代和条件语句 48 4.3.6 Thymeleaf模板片段的定义和引用 49 4.4 实现基于Freemarker的Web应用 50 4.4.1 添加依赖 50 4.4.2 创建类TemplateController 50 4.4.3 创建文件helloFtl.ftl 50 4.4.4 运行程序 51 4.5 Spring Boot对Ajax的应用 51 4.5.1 创建类HelloWorldAjaxController 51 4.5.2 创建文件index.html 52 4.5.3 运行程序 52 4.6 Spring Boot实现RESTful风格Web应用 53 4.6.1 创建类BlogController 53 4.6.2 创建文件index.html 54 4.6.3 创建文件blog.html 54 4.6.4 创建文件query.html 55 4.6.5 运行程序 55 4.7 带Bootstrap和jQuery的Web应用 56 4.7.1 添加依赖 56 4.7.2 创建类Person 56 4.7.3 创建类BJController 57 4.7.4 添加辅助文件 58 4.7.5 创建文件index.html 58 4.7.6 运行程序 60 4.8 使用Servlet、过滤器、监听器和拦截器 60 4.8.1 创建类MyServlet1 61 4.8.2 修改入口类1 62 4.8.3 运行程序1 62 4.8.4 创建类MyServlet2 62 4.8.5 修改入口类2 63 4.8.6 运行程序2 64 4.8.7 创建类MyFilter 64 4.8.8 创建类MyServletContextListener 65 4.8.9 创建类MyHttpSessionListener 65 4.8.10 运行程序3 65 4.8.11 创建类MyInterceptor1 66 4.8.12 创建类MyInterceptor2 67 4.8.13 创建类MyWebAppConfigurer 67 4.8.14 运行程序4 68 习题4 68 第5章 Spring Boot的数据库访问 70 5.1 使用JDBC访问H2数据库 71 5.1.1 添加依赖 71 5.1.2 创建类Customer 71 5.1.3 修改入口类 72 5.1.4 修改配置文件application.properties 73 5.1.5 运行程序 74 5.2 使用Spring Data JPA访问H2数据库 75 5.2.1 添加依赖 75 5.2.2 创建类User 76 5.2.3 创建接口UserRepository 76 5.2.4 修改入口类 77 5.2.5 修改配置文件application.properties 78 5.2.6 运行程序 78 5.2.7 程序扩展 79 5.3 使用Spring Data JPA和RESTful访问H2数据库 80 5.3.1 添加依赖 80 5.3.2 创建类Person 80 5.3.3 创建接口PersonRepository 81 5.3.4 修改配置文件application.properties 82 5.3.5 启动程序并进行REST服务测试 82 5.4 使用Spring Data JPA访问MySQL数据库 84 5.4.1 添加依赖 84 5.4.2 创建类User和接口UserRepository 85 5.4.3 修改配置文件和入口类 85 5.4.4 运行程序 86 5.4.5 程序扩展 86 5.5 访问MongoDB数据库 88 5.5.1 添加依赖 88 5.5.2 创建类Person 88 5.5.3 创建接口PersonRepository 89 5.5.4 修改入口类 90 5.5.5 运行程序 91 5.5.6 程序扩展 92 5.5.7 使用REST方法访问MongoDB 93 5.6 访问Neo4j数据库 95 5.6.1 添加依赖 95 5.6.2 创建类Actor 95 5.6.3 创建接口ActorRepository 97 5.6.4 修改配置文件application.properties 97 5.6.5 修改入口类 97 5.6.6 运行程序 98 5.6.7 利用REST方法访问Neo4j 99 5.7 访问数据库完整示例 103 5.7.1 添加依赖 103 5.7.2 创建类Book 103 5.7.3 创建接口BookDao 104 5.7.4 修改配置文件application.properties 104 5.7.5 创建类BookController 105 5.7.6 创建文件bookAdd.html 107 5.7.7 创建文件bookList.html 108 5.7.8 创建文件bookUpdate.html 108 5.7.9 运行程序 109 习题5 112 第6章 Spring Boot的Web服务开发 113 6.1 基于Jersey实现RESTful风格Web服务 113 6.1.1 添加依赖 113 6.1.2 创建类Constant 114 6.1.3 创建类JerseyController 114 6.1.4 创建类JerseyConfig 115 6.1.5 修改入口类 116 6.1.6 运行程序 116 6.1.7 补充说明 117 6.2 使用RESTful风格Web服务 118 6.2.1 网上已有Web服务random的说明 118 6.2.2 创建类Quote 118 6.2.3 创建类Value 119 6.2.4 修改入口类 120 6.2.5 运行程序 121 6.3 使用带AngularJS的RESTful风格Web服务 121 6.3.1 添加依赖和辅助文件 121 6.3.2 创建文件ajs.html 121 6.3.3 运行程序 122 6.4 基于Actuator实现RESTful风格Web服务 123 6.4.1 添加依赖 123 6.4.2 创建类Greeting 123 6.4.3 创建类GreetingController 124 6.4.4 修改配置文件application.properties 124 6.4.5 运行程序 124 6.5 实现跨域资源共享的RESTful风格Web服务 125 6.5.1 添加依赖 125 6.5.2 创建类CORSConfiguration 125 6.5.3 创建类ApiController 126 6.5.4 创建文件CORSjs.html 126 6.5.5 运行程序 127 6.6 实现超媒体驱动的RESTful风格Web服务 128 6.6.1 添加依赖 128 6.6.2 创建类Greet 129 6.6.3 创建类GreetController 129 6.6.4 运行程序 130 6.7 整合CXF的Web服务开发 130 6.7.1 修改文件pom.xml 131 6.7.2 创建类User 132 6.7.3 创建接口UserService 133 6.7.4 创建类UserServiceImpl 134 6.7.5 创建类TestConfig 135 6.7.6 运行程序 135 6.7.7 创建类Client并运行程序 136 习题6 137 第7章 Spring Boot的数据处理 138 7.1 声明式事务 138 7.1.1 添加依赖 138 7.1.2 创建类Account 139 7.1.3 创建接口AccountDao 140 7.1.4 创建接口AccountService 140 7.1.5 创建类AccountController 140 7.1.6 创建配置文件application.yml 141 7.1.7 创建类AccountServiceImpl 141 7.1.8 运行程序 142 7.2 数据缓存 143 7.2.1 添加依赖 144 7.2.2 创建类DemoInfo 144 7.2.3 创建接口DemoInfoRepository 145 7.2.4 创建接口DemoInfoService 146 7.2.5 创建类DemoInfoServiceImpl 146 7.2.6 创建类DemoInfoController 147 7.2.7 创建配置文件后运行程序 148 7.3 使用Druid 149 7.3.1 添加依赖 149 7.3.2 创建类DruidStatViewServlet 150 7.3.3 创建类DruidStatFilter 151 7.3.4 修改入口类 151 7.3.5 运行程序 151 7.3.6 扩展程序并运行程序 152 7.4 使用表单验证 154 7.4.1 添加依赖 154 7.4.2 创建类Student 155 7.4.3 创建接口StudentDao 156 7.4.4 创建接口StudentService 156 7.4.5 创建类StudentServiceImpl 156 7.4.6 创建类StudentController 157 7.4.7 创建文件studentAdd.html 157 7.4.8 创建配置文件并运行程序 158 7.5 整合MyBatis访问数据库 159 7.5.1 添加依赖 159 7.5.2 创建类City 160 7.5.3 创建接口CityDao 161 7.5.4 创建接口CityService 161 7.5.5 创建类CityServiceImpl 161 7.5.6 创建类CityController 162 7.5.7 修改配置文件application.properties 162 7.5.8 运行程序 163 7.6 整合Spring Batch和Quartz 163 7.6.1 添加依赖 163 7.6.2 创建类MyTaskOne 164 7.6.3 创建类MyTaskTwo 164 7.6.4 创建类BatchConfig 165 7.6.5 修改入口类 166 7.6.6 运行程序 167 7.6.7 增加依赖 167 7.6.8 修改类BatchConfig 167 7.6.9 创建类CustomQuartzJob 168 7.6.10 创建类QuartzConfig 170 7.6.11 创建文件quartz.properties和application.properties 172 7.6.12 修改入口类 173 7.6.13 运行程序 173 习题7 174 第8章 Spring Boot的文件应用 175 8.1 文件上传 175 8.1.1 添加依赖 175 8.1.2 创建类FileUploadController 176 8.1.3 创建文件file.html 177 8.1.4 创建文件multifile.html 178 8.1.5 运行程序 178 8.1.6 扩展程序 179 8.2 文件下载 180 8.2.1 添加依赖 180 8.2.2 创建类FileDownloadController 180 8.2.3 创建文件downloadfile.html 182 8.2.4 运行程序 182 8.3 图片文件上传和显示 182 8.3.1 添加依赖 182 8.3.2 创建类User 183 8.3.3 创建接口UserRepository 184 8.3.4 创建类MyWebConfig 184 8.3.5 创建类UserPictureController 185 8.3.6 创建文件zhuce.html 186 8.3.7 创建文件permanager.html 186 8.3.8 创建配置文件application.yml 187 8.3.9 创建目录并运行程序 187 8.4 访问HDFS 188 8.4.1 添加依赖 188 8.4.2 修改入口类 189 8.4.3 运行程序 189 8.4.4 简化程序 190 8.5 用Elasticsearch实现全文搜索 190 8.5.1 安装Elasticsearch并添加依赖 190 8.5.2 创建类EsBlog 191 8.5.3 创建接口EsBlogRepository 192 8.5.4 创建类EsBlogRepositoryTest 192 8.5.5 修改配置文件application.properties 194 8.5.6 运行程序(1) 194 8.5.7 创建类BlogController 194 8.5.8 运行程序(2) 195 8.6 实现邮件发送 196 8.6.1 登录邮箱并开启授权码 196 8.6.2 添加依赖 196 8.6.3 创建接口EmailService 197 8.6.4 创建类EmailServiceImp 198 8.6.5 创建类DemoApplicationTests 200 8.6.6 修改配置文件application.properties 201 8.6.7 创建文件email.html 202 8.6.8 运行程序 202 8.7 用REST Docs创建API文档 203 8.7.1 添加依赖 203 8.7.2 创建类HomeController 204 8.7.3 运行程序 204 8.7.4 创建类WebLayerTest 205 8.7.5 创建文件index.adoc 206 8.7.6 添加插件 206 8.7.7 利用Maven的package命令生成文件 207 习题8 208 第9章 Spring Boot 的WebFlux开发 209 9.1 WebFlux及其编程模型 209 9.1.1 WebFlux 209 9.1.2 Spring Boot的WebFlux编程模型 210 9.2 WebFlux入门应用 211 9.2.1 添加依赖 211 9.2.2 创建类CityHandler 212 9.2.3 创建类CityRouter 212 9.2.4 运行程序 213 9.3 实现基于WebFlux的RESTful服务 213 9.3.1 添加依赖 213 9.3.2 创建类User 213 9.3.3 创建类UserController 214 9.3.4 运行程序 216 9.4 基于WebFlux访问MongoDB数据库 218 9.4.1 添加依赖 218 9.4.2 安装并启动MongoDB数据库 218 9.4.3 创建类Person 219 9.4.4 创建接口PersonRepository 219 9.4.5 创建类PersonController 220 9.4.6 修改配置文件application.properties 220 9.4.7 运行程序 221 9.5 基于WebFlux使用Thymeleaf和MongoDB 221 9.5.1 添加依赖 221 9.5.2 创建类City 222 9.5.3 创建接口CityRepository 223 9.5.4 创建类CityHandler 223 9.5.5 创建类CityController 224 9.5.6 创建文件cityList.html 226 9.5.7 创建文件city.html 226 9.5.8 运行程序 227 9.6 基于WebFlux访问Redis数据库 228 9.6.1 添加依赖 228 9.6.2 创建类Coffee 229 9.6.3 创建类CoffeeConfiguration 229 9.6.4 创建类CoffeeLoader 230 9.6.5 运行程序 231 9.6.6 创建类City 231 9.6.7 创建类CityWebFluxController 232 9.6.8 修改配置文件application.properties 233 9.6.9 运行程序 233 9.6.10 创建类CityWebFluxReactiveController 234 9.7 基于WebFlux使用WebSocket 235 9.7.1 添加依赖 235 9.7.2 创建类EchoHandler 236 9.7.3 创建类WebSocketConfiguration 236 9.7.4 创建类WSClient 237 9.7.5 创建文件websocket-client.html 238 9.7.6 运行程序 238 习题9 239 第10章 Spring Boot开发案例 240 10.1 案例分析 240 10.1.1 主要界面 240 10.1.2 主要功能与数据库介绍 243 10.2 案例实现 244 10.2.1 添加依赖 244 10.2.2 创建类User、CourseType和Course 245 10.2.3 创建Service接口 249 10.2.4 创建Service接口实现类 250 10.2.5 创建Mapper接口 253 10.2.6 创建类WebLogAspect 254 10.2.7 创建类CourseQueryHelper 255 10.2.8 创建控制器类 256 10.2.9 修改入口类 262 10.2.10 创建XML文件 263 10.2.11 创建HTML文件 266 10.2.12 修改和创建配置文件 283 10.2.13 创建CSS文件 284 10.2.14 配置辅助文件与运行程序 287 习题10 287 参考文献 288

    与描述相符

    100

    北京 天津 河北 山西 内蒙古 辽宁 吉林 黑龙江 上海 江苏 浙江 安徽 福建 江西 山东 河南 湖北 湖南 广东 广西 海南 重庆 四川 贵州 云南 西藏 陕西 甘肃 青海 宁夏 新疆 台湾 香港 澳门 海外