《 Kotlin + Spring Boot : 下一代 Java 服务端开发 》
Kotlin + Spring Boot : 下一代 Java 服务端开发
第 O 部门 快速开始
第1章 Kotlin + Spring Boot 快速开始 Hello World
1.1 环境准备:JDK,Gradle,IDEA
1.2 快速上手:Kotlin + Spring Boot 实现一个 Restful Hello World
第2章 Spring Boot 企业级服务开发:从 Java 到 Kotlin
2.1 Java语言的缺点
2.1.1 Java 发展历程
2.1.2 Java 的缺点
2.2 为什么是 Kotlin
2.2.1 Kotlin 产生的背景
2.2.2 Kotlin 解决了哪些问题
2.3 为什么是 Spring Boot
2.4 Spring 的发展历程
2.5 Spring IOC
2.6 Spring 容器
2.7 Spring 的配置地狱
2.8 Spring Boot 是什么
2.9 从 Spring 到 Spring Boot
2.10 下一代企业级服务开发:Kotlin + Spring Boot
2.11 Kotlin 在 Android 移动开发领域势不可挡
第一部分 Kotlin 语言基础
3.1 Kotlin 是什么
3.2 Kotlin 目标平台
3.2.1 JVM
3.2.2 Android
3.2.3 Browser
3.2.4 Native
3.3 Why Kotlin?
3.4 Kotlin 发展简史
3.5 Kotlin 的主要特征
3.5.1 简洁:大幅减少样板代码的数量
3.5.2 安全:避免空指针异常等错误
3.5.3 互操作:为JVM,Android和浏览器利用现有的库
3.5.4 工具型:选择任意的Java IDE或命令行构建
3.6 Kotlin 的编程哲学:务实、极简、安全、互操作
3.7 Kotlin 编程工具
4.1 空指针异常
4.2 什么是可空类型
4.3 为什么引入可空类型
4.4 安全调用运算符
4.5 类型转换
4.6 基本数据类型与类型系统
5.1 面向对象简史与编程思想
5.2 声明类和接口
5.3 抽象类与接口
5.4 object 单例对象类型
5.5 数据类
5.6 注解类型
5.7 枚举类型
5.8 内部类
第6章 一等函数支持(FP):高阶函数与 Lambda 表达式
6.1 声明函数
6.2 函数的组合:高阶函数
6.3 Lambda 表达式
6.4 带接收者的 Lambda
6.5 递归与 Y 组合子
7.1 集合类简介
7.2 不可变集合类
7.3 可变集合类
7.4 集合类的 Stream API
7.5 惰性序列:Sequence
8.1 为何引入泛型
8.2 在类、接口和函数上使用泛型
8.3 协变与逆变
8.4 类型擦除
9.1 扩展函数
9.2 扩展属性
9.3 扩展中的this关键字
9.4 类委托
9.5 属性委托
10.1 什么是DSL
10.2 Kotlin的DSL特性支持
10.3 实现一个http ajax请求的DSL
11.1 元编程简介
11.2 为什么要使用注解跟反射
11.3 声明注解与处理注解
11.4 反射的原理
11.5 使用反射获取泛型信息
12.1 协程的概念
12.2 为什么使用协程
12.2 创建协程
12.3 挂起函数
12.4 协程与线程比较
第二部分 Spring Boot 框架介绍
13.1 从 XML 中逃离:Spring JavaConfig
13.2 Spring 3 新特性
13.3 Spring 4 与 Spring Boot
13.4 Spring Boot 解放 Spring的配置
14.5 SpringBoot 核心模块
13.6 Spring Boot Actuator
13.7 Spring Boot 与微服务
14.1 常用 Spring Boot Starter的介绍
基础起步依赖 Spring Boot Starter
测试起步依赖 Spring Boot Test Starter
Web 开发起步依赖 Spring Boot Web Starter
模板引擎起步依赖 FreeMarker Starter 与 Thymeleaf Starter
数据库 ORM 层起步依赖 Spring Boot Data JPA Starter 与 Mybatis Spring Boot Starter
权限与安全起步依赖 Spring Boot Security Starter
WebSocket编程起步依赖 Spring Boot WebSocket Starter
邮件模块起步依赖 Spring Boot Mail Starter
日志功能起步依赖 Spring Boot Logging Starter
Servlet 容器起步依赖 Tomcat Starter 与 Jetty Starter
AOP 编程起步依赖 Spring Boot AOP Starter
数据校验起步依赖 Spring Boot Validation Starter
Redis 起步依赖 Spring Boot Data Redis Starter
MongoDB 起步依赖 Spring Boot Data MongoDB Starter
REST 起步依赖 Spring Boot Data REST Starter
缓存Cache 起步依赖 Spring Boot Cache Starter
Actuator起步依赖 Spring Boot Actuator Starter
Spring Cloud 起步依赖 Spring Cloud Starter
Eureka起步依赖 Spring Cloud Starter Eureka
Oauth2起步依赖 Spring Cloud Starter Oauth2
第15章 Spring Boot AutoConfigure自动配置原理
15.1 什么是 AutoConfigure
15.2 Spring Boot 怎样实现自动配置
15.2.1 SpringApplication 类
15.2.2 使用 Fluent Builder API 构建 SpringApplication 类
15.2.3 @EnableAutoConfiguration自动配置原理
15.3 Spring Boot 默认配置约定
15.4 FreeMarkerAutoConfiguration自动配置的实例分析
15.5 应用启动初始化 CommandLineRunner
第16章 实现一个自己的 Spring Boot Starter
16.1 新建自定义的 Starter 工程
16.2 创建自动配置类 MyAutoConfiguration
16.3 @Configuration 配置系列注解
@ConfigurationProperties 注解
@EnableConfigurationProperties 注解
16.4 @ConditionalOn 条件装配系列注解
@ConditionalOnClass:当类路径下有指定的类的条件下
@ConditionalOnProperty:指定的属性是否有指定的值
@ConditionalOnBean:当容器中有指定的Bean的条件下
@ConditionalOnExpression:基于SpEL表达式作为判断条件
@ConditionalOnJava:基于JVM版本作为判断条件
@ConditionalOnJndi:在JNDI存在的条件下查找指定的位置
@ConditionalOnMissingBean:当容器中没有指定Bean的情况下
@ConditionalOnMissingClass:当类路径下没有指定的类的条件下
@ConditionalOnNotWebApplication:当前项目不是Web项目的条件下
@ConditionalOnResource:类路径下是否有指定的资源
@ConditionalOnSingleCandidate:当指定的Bean在容器中只有一个,或者在有多个Bean的情况下,用来指定首选的Bean
@ConditionalOnWebApplication:当前项目是Web项目的条件下
16.5 编写服务实现类
16.6 注册配置自动配置类
@ImportAutoConfiguration 注解
16.7 将上面构建的starter安装到本地
16.8 新建spring boot项目依赖上面的 starter
16.9 添加属性到application.properties配置文件中
16.10 编写测试代码
第17章 Spring 5 内置的 Kotlin 函数式编程风格
17.1 Spring Framework 5.0 新特性
17.2 内置的 Kotlin 函数式编程风格
17.3 使用 Spring WebFlux 进行响应式编程
第三部分 综合实战
第18章 Kotlin 与 Spring Boot 使用 JUnit 进行单元测试
18.1 为什么要进行测试
18.2 JUnit 框架简介
18.3 @RunWith 注解
18.4 @SpringBootTest 注解
18.5 SpringRunner 类
18.6 使用 Mockito 进行 Mock 测试
18.6.1 Mocking 与 Spying Beans
18.6.2 使用@WebMvcTest与@MockBean 来测试 Controller 代码
18.7 使用HTMLUnit的 WebClient来进行 Web 页面的测试
第19章 Kotlin 与 Spring Boot 数据层ORM 框架集成
19.1 Spring Data JPA 简介
19.2 Kotlin 与 Spring Boot 集成 Spring Data JPA
19.2.1 使用 Spring Boot Data JPA Starter 起步依赖集成
19.2.2 配置数据源
19.2.3 配置 JPA 属性:spring.jpa.hibernate.ddl-auto
19.2.4 创建 Entity
19.2.5 实现 Repository 接口函数
CrudRepository
PagingAndSortingRepository
JpaRepository
19.3 分页与排序
19.3.1 排序 Sort 类型
19.3.2 分页相关的类型 Pageable、PageRequest 与 Page
19.4 自定义 Dto 映射到多表关联查询结果
19.5 JPA 集成 QueryDSL
19.6 MyBatis简介
19.7 使用 mybatis-spring-boot-starter 集成
19.8 在 application.properties 中配置 mybatis
19.9 手动实现 TransactionManagementConfigurer 方式集成
19.10 集成 MyBatis Generator
19.11 分页插件 PageHelper
19.12 通用 Mapper 集成
19.13 使用@Provider 注解配置 Mapper
第20章 Kotlin 与 Spring Boot 集成 Spring MVC 进行 Web 应用开发
20.1 MVC 三层模型
20.2 基于注解的 Controller
20.2.1 @Controller 注解
20.2.2 数据视图模型: Model 与 ModelAndView
20.2.3 REST 接口@RestController
20.2.4 URL 路径映射 @RequestMapping
20.2.5 @ResponseBody
20.2.6 数据的生产和消费:consumes 、produces
20.2.7 @PathVariable 与 @RequestParam
20.3 数据绑定
20.3.1 @ModelAttribute 注解
20.3.2 @InitBinder 注解与 WebDataBinder
20.3.3 BindingResult
20.3.4 数据绑定流程
20.4 数据类型转换器 Converter
20.4.1 消息转换器 HttpMessageConverter
20.4.2 自定义日期类型格式转换器
20.4.3 实现 ConversionService 接口
20.5 数据校验
20.5.1 JSR-303
20.5.2 使用 @Validated 注解
20.5.3 实现 Validator 校验器
20.6 表达式语言 SPEL
20.7 上传与下载文件:Multipart File
20.8 异常处理: @ControllerAdvice 与 @ExceptionHandler
第21章 Kotlin 与 Spring Boot 集成 Spring WebFlux 进行响应式 Web 应用开发
21.1 响应式宣言
21.2 Spring 5 响应式Web框架架构图
21.3 Router Functions
21.4 核心组件 WebFlux
21.5 Reactive Streams
21.6 示例工程详解
21.6.1 Mono 类
21.6.2 服务端响应 ServerResponse
21.6.3 路由函数 RouterFunction
21.6.4 处理函数 HandlerFunction
21.6.5 测试输出
第22章 Kotlin 与 Spring Boot 视图层模板引擎集成
22.1 Freemarker 基础语法
22.2 FreeMarkerAutoConfiguration
22.3 Kotlin 与 Spring Boot 集成 Freemarker 模板引擎
22.4 Thymeleaf 基础语法
22.5 ThymeleafAutoConfiguration
22.6 Kotlin 与 Spring Boot 集成 Thymeleaf 模板引擎
第23章 Kotlin 与 Spring Boot 权限与安全集成
23.1 Spring Security 是什么
23.2 使用 Spring Boot Security Starter 集成
23.3 Spring Boot Security 的基本配置
23.4 初级 Security: 默认认证用户名密码
23.4.1 WebMvcConfigurer
23.4.2 AuthenticationManager
23.5 中级 Security:内存用户名密码认证
23.5.1 httpBasic
23.5.2 formLogin
23.5.3 角色权限控制
23.5.4 获取当前登录认证通过的用户信息
23.5.5 注册 Servlet、Filter、Listener 等Bean
23.6 高级 Security: 用数据库存储用户和角色,实现安全认证
23.6.1 用户、角色及其关联关系的表实体类:User,Role,UserRole
23.6.2 继承 WebSecurityConfigurerAdapter 配置Spring Security
23.6.3 从数据库中获取用户信息:UserDetailsService
23.6.4 配置错误处理页面
23.6.5 测试运行
23.7 Shiro 是什么
23.8 Kotlin 与 Spring Boot 集成 Shiro 配置步骤
23.9 使用 HashedCredentialsMatcher 对密码进行编码
23.10 使用 ShiroRealm 来处理用户的认证和权限
23.11 使用 SecurityManager 进行权限的管理
第24章 Kotlin 与 Spring Boot 定时任务集成 Spring Scheduling
24.1 直接使用@Scheduled实现静态定时任务
24.2 实现 SchedulingConfigurer 接口完成动态定时任务
第25章 Kotlin 与 Spring Boot 批量任务集成 Spring Batch
第26章 Kotlin 与 Spring Boot 全文搜索引擎集成 ElasticSearch
第27章 Kotlin 与 Spring Boot 消息中间件集成 Kafka
27.1 Kafka 配置
27.2 发送 Message
27.3 接收 Message
第28章 Kotlin 与 Spring Boot 缓存集成 Redis
第29章 Kotlin 与 Spring Boot 日志集成 sl4j
29.1 配置 application.properties
29.2 logback-spring.xml 文件详解
第30章 Kotlin 与 Spring Boot 邮件功能集成
第31章 Kotlin 与 Spring Boot 集成 Swagger2 自动化API管理
31.1 Swagger2 动化 API 管理
31.2 Kotlin 与 Spring Boot 集成 Swagger2 步骤
31.2.1 添加工程依赖
31.2.2 配置Swagger的Docket Bean
31.2.3 继承WebMvcConfigurerAdapter 重写 addResourceHandlers 函数
31.2.4 在Controller上面的使用 Swagger2 的@Api 注解
31.2.5 启用Swagger2配置注解 @EnableSwagger2
31.3 运行测试
第32章 Kotlin + Spring Boot 与 Spring Cloud 微服务实践
33.1 Endpoints 介绍
33.2 设置 Endpoints 安全权限
33.3 实现自定义的 Endpoints
34.1 应用打包成可执行的 jar 包
34.2 应用打包成可部署的 war 包
34.3 @Profile 注解与多环境部署
附录:
I. application.properties
详见官网文档:Appendix A. Common application properties
II. Auto-configuration classes
Appendix C. Auto-configuration classes
III. Test auto-configuration annotations
Appendix D. Test auto-configuration annotations
参考资料
Kotlin 1.2.0 新特性:
https://github.com/JetBrains/kotlin/blob/1.2.0/ChangeLog.md
Spring Boot 与 微服务:
http://www.infoq.com/cn/articles/microframeworks1-spring-boot
http://blog.csdn.net/zeb_perfect/article/details/51945350
SpringBoot 自动配置原理:http://www.jianshu.com/p/ccadc2bdb6d7
自定义 Spring Boot Starter :
http://blog.csdn.net/liuchuanhong1/article/details/55057135
http://www.jianshu.com/p/45538b44e04e
http://www.jianshu.com/p/85460c1d835a
Spring 5 新特性:
https://www.oschina.net/translate/whats-new-in-spring-framework-5
Spring Boot集成Spring Security:
http://www.jianshu.com/p/08cc28921fd0
SpringBoot + Shiro 整合 登录认证和权限控制:
http://www.jianshu.com/p/672abf94a857?winzoom=1
http://shiro.apache.org/
https://segmentfault.com/a/1190000008847948
https://www.cnblogs.com/hlhdidi/p/6376457.html
http://blog.csdn.net/u012373815/article/details/57532292
http://412887952-qq-com.iteye.com/blog/2299732
SpringBoot SpringMVC实现文件下载:
http://www.jianshu.com/p/cc31a4da2d64
Spring Boot 集成日志 logging sl4j:
http://www.jianshu.com/p/666ed3be3aee
Spring Boot配置文件-多环境配置: https://www.cnblogs.com/winner-0715/p/6754994.html?utm_source=itdadao&utm_medium=referral
SpringBoot官网文档:
http://projects.spring.io/spring-boot/
https://pivotal.io/spring-app-framework#buildanything
http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/
Spring Data JPA:
https://projects.spring.io/spring-data-jpa/#quick-start
spring-data-jpa-with-querydsl:
http://dontpanic.42.nl/2011/06/spring-data-jpa-with-querydsl.html
http://www.jianshu.com/p/2b68af9aa0f5
SpringBoot 集成 MyBatis:
http://blog.csdn.net/isea533/article/details/50359390
https://github.com/EasySpringBoot/MyBatis-Spring-Boot
Spring MVC 消息转换器:
http://www.jianshu.com/p/2f633cb817f5
http://blog.csdn.net/qwe6112071/article/details/51056781
http://jinnianshilongnian.iteye.com/blog/1723270
SpringMVC之类型转换Converter:
http://blog.csdn.net/renhui999/article/details/9837897
SpringMVC 数据绑定流程
http://www.cnblogs.com/rocky-AGE-24/p/5224205.html
Spring Boot集成Swagger2构建自动化Rest API文档:
http://www.jianshu.com/p/be05aa96fd29
参考书籍:
《Kotlin 实战》
《Kotlin 极简教程》
《Spring 实战》
《Java 编程思想》
《Effective Java》
《Java 核心技术 I/II》
《Spring MVC 学习指南》