慕课网_《Spring Boot 2.0深度实践-初遇Spring Boot》学习总结
时间:2018年04月08日星期日
说明:本文部分内容均来自慕课网。@慕课网:https://www.imooc.com
教学源码:无
学习源码:https://github.com/zccodere/s...
第一章:课程介绍
1-1 课程介绍
课程内容
- Spring Boot介绍
- 环境准备
- 第一个Spring Boot项目
- 多模块项目
- 打包和运行
1-2 框架定位
1-3 特性介绍
2.0 新特性
- 编程语言:Java 8及以上
- 底层框架:Spring Framework 5.0.0及以上
- 全新特性:Web Flux
为什么选择Web Flux
- 函数编程:Java8 Lambda
- 响应编程:Reactive Streams
- 异步编程:Servlet 3.1或Asyn NIO
第二章:简单项目
2-1 环境准备
开发环境
- 安装JDK(https://java.oracle.com)
- 安装Maven(https://maven.apache.org)
- 安装IDEA(https://www.jetbrains.com/idea)
2-2 构建项目
简单应用
- 编写REST程序
- 运行Spring Boot应用
- 使用Http请求工具Postman
场景说明
- 定义用户模型,包括属性:用户ID和名称
- 客户端发送POST请求,创建用户(Web MVC)
- 客户端发送GET请求,获取所有用户(Web Flux)
代码编写
1.创建名为boot-simple的maven工程pom如下
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.myimooc</groupId> <artifactId>boot-simple</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>boot-simple</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
2.完成后的项目结构如下
3.编写BootSimpleApplication类
package com.myimooc.boot.simple; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * <br> * 标题: 启动类<br> * 描述: 简单应用<br> * * @author zc * @date 2018/04/08 */ @SpringBootApplication public class BootSimpleApplication { public static void main(String[] args) { SpringApplication.run(BootSimpleApplication.class, args); } }
4.编写User类
package com.myimooc.boot.simple.domain; import java.io.Serializable; /** * <br> * 标题: 用户模型<br> * 描述: POJO类<br> * * @author zc * @date 2018/04/08 */ public class User implements Serializable{ private static final long serialVersionUID = 7564986345486454458L; /** * 主键ID */ private Integer id; /** * 用户名称 */ private String name; @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + '}'; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
5.编写UserRepository类
package com.myimooc.boot.simple.repository; import com.myimooc.boot.simple.domain.User; import org.springframework.stereotype.Repository; import java.util.Collection; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.atomic.AtomicInteger; /** * <br> * 标题: 用户资源库<br> * 描述: 领域驱动模型开发<br> * * @author zc * @date 2018/04/08 * {@link User} {@link Repository} */ @Repository public class UserRepository { /** * 采用内存型存储方式 */ private final ConcurrentMap<Integer,User> repository = new ConcurrentHashMap<>(16); private final static AtomicInteger ID_GENERATOR = new AtomicInteger(); /** * 保存用户对象 * @param user {@link User} * @return 如果成功返回<code>true</code>,否则,返回<code>false</code> */ public boolean save(User user){ // ID 从 1 开始 Integer id = ID_GENERATOR.incrementAndGet(); user.setId(id); // put 方法返回 null 时表示保存成功 return repository.put(id,user) == null; } /** * 返回所有用户列表 * @return 所有用户列表 */ public Collection<User> findAll(){ return repository.values(); } }
6.编写UserController类
package com.myimooc.boot.simple.controller; import com.myimooc.boot.simple.domain.User; import com.myimooc.boot.simple.repository.UserRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; /** * <br> * 标题: 用户 REST 接口<br> * 描述: RESTFul 格式<br> * * @author zc * @date 2018/04/08 */ @RestController public class UserController { private final UserRepository userRepository; @Autowired public UserController(UserRepository userRepository){ this.userRepository = userRepository; } @PostMapping("/person/save") public User save(@RequestParam String name){ User user = new User(); user.setName(name); if (userRepository.save(user)){ System.out.printf("用户对象: %s 保存成功\n",user); } return user; } }
7.编写RouterFunctionConfiguration类
package com.myimooc.boot.simple.config; import com.myimooc.boot.simple.domain.User; import com.myimooc.boot.simple.repository.UserRepository; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.reactive.function.server.*; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import java.util.Collection; /** * <br> * 标题: 路由器函数配置<br> * 描述: 配置映射<br> * * @author zc * @date 2018/04/08 */ @Configuration public class RouterFunctionConfiguration { /** * Servlet 规范 * 请求接口:ServletRequest 或者 HttpServletRequest * 响应接口:ServletResponse 或者 HttpServletResponse * * Spring 5.0 重新定义了服务请求的响应接口 * 请求接口:ServerRequest * 响应接口:ServerResponse * 即可支持 Servlet 规范,也可以支持自定义,比如 Netty (Web Server) * 以本例 * 定义 GET 请求,并且放回所有的用户对象 URI:/person/find/all * Flux 是 0 - N 个对象集合 * Mono 是 0 - 1 个对象集合 * Reactive 中的 Flux 或者 Mono 是异步处理(非阻塞) * 集合对象基本上是同步处理(阻塞) * Flux 或者 Mono 都是 Publisher */ @Bean public RouterFunction<ServerResponse> personFindAll(UserRepository userRepository){ Collection<User> users = userRepository.findAll(); return RouterFunctions.route(RequestPredicates.GET("/person/find/all"), request -> { Flux<User> userFlux = Flux.fromIterable(users); return ServerResponse.ok().body(userFlux,User.class); }); } }
第三章:简单使用
3-1 模块拆分
多模块重构
- 调整父模块工程类型(packageing)
- 创建子模块工程(module)
- 子模块依赖管理(dependencyManagement)
完成后的结构如下
第四章:课程总结
4-1 课程总结
主要内容
- Spring Boot 介绍
- Spring Boot 项目
- Spring Boot 模块
- Spring Boot 打包
- Spring Boot 运行
相关推荐
嗡汤圆 2019-09-10
gongpulin 2019-06-27
家辉 2019-06-27
Chydar 2019-06-27
QHJAVA 2019-06-27
蓝蓝的天 2019-06-25
rually 2019-06-25
腊八粥 2019-06-25
itjavashuai 2019-06-25
ForMyQianDuan 2019-06-21
sqlican 2019-06-21
spring艳 2019-06-21
LeeEmmmm 2019-06-21
zyjj 2019-06-21
zhangyayun0 2019-06-21
Code 2019-04-15
qiagu 2018-04-18