资讯专栏INFORMATION COLUMN

慕课网_《Spring Boot 2.0深度实践-初遇Spring Boot》学习总结

hqman / 3538人阅读

时间: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如下



    4.0.0

    com.myimooc
    boot-simple
    0.0.1-SNAPSHOT
    jar

    boot-simple
    Demo project for Spring Boot

    
        org.springframework.boot
        spring-boot-starter-parent
        2.0.1.RELEASE
         
    

    
        UTF-8
        UTF-8
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter-webflux
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    



2.完成后的项目结构如下

3.编写BootSimpleApplication类

package com.myimooc.boot.simple;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * 
* 标题: 启动类
* 描述: 简单应用
* * @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;

/**
 * 
* 标题: 用户模型
* 描述: POJO类
* * @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;

/**
 * 
* 标题: 用户资源库
* 描述: 领域驱动模型开发
* * @author zc * @date 2018/04/08 * {@link User} {@link Repository} */ @Repository public class UserRepository { /** * 采用内存型存储方式 */ private final ConcurrentMap repository = new ConcurrentHashMap<>(16); private final static AtomicInteger ID_GENERATOR = new AtomicInteger(); /** * 保存用户对象 * @param user {@link User} * @return 如果成功返回true,否则,返回false */ 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 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;

/**
 * 
* 标题: 用户 REST 接口
* 描述: RESTFul 格式
* * @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 保存成功 ",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;

/**
 * 
* 标题: 路由器函数配置
* 描述: 配置映射
* * @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 personFindAll(UserRepository userRepository){ Collection users = userRepository.findAll(); return RouterFunctions.route(RequestPredicates.GET("/person/find/all"), request -> { Flux 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 运行

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/68992.html

相关文章

  • 《Java编程方法论:响应式RxJava与代码设计实战》序

    摘要:原文链接编程方法论响应式与代码设计实战序,来自于微信公众号次灵均阁正文内容在一月的架构和设计趋势报告中,响应式编程和函数式仍旧编列在第一季度的早期采纳者中。 原文链接:《Java编程方法论:响应式RxJava与代码设计实战》序,来自于微信公众号:次灵均阁 正文内容 在《2019 一月的InfoQ 架构和设计趋势报告》1中,响应式编程(Reactive Programming)和函数式...

    PAMPANG 评论0 收藏0
  • Dubbo Spring Cloud 重塑微服务治理

    摘要:在服务治理方面,相较于而言,并不成熟。遗憾的是,往往被部分开发者片面地视作服务治理的框架,而非微服务基础设施。因此,建议开发人员将或者迁移为服务。因此,下一步需要将其配置服务远程。当服务提供方启动后,下一步实现一个服务消费方。 原文链接:Dubbo Spring Cloud 重塑微服务治理,来自于微信公众号:次灵均阁 摘要 在 Java 微服务生态中,Spring Cloud1 成为...

    wh469012917 评论0 收藏0
  • 课网_Spring Boot 发送邮件》学习总结

    摘要:慕课网发送邮件学习总结时间年月日星期六说明本文部分内容均来自慕课网。 慕课网《Spring Boot 发送邮件》学习总结 时间:2018年09月08日星期六 说明:本文部分内容均来自慕课网。@慕课网:https://www.imooc.com 教学源码:https://github.com/ityouknow/... 学习源码:https://github.com/zccoder...

    Meathill 评论0 收藏0
  • 课网_《Java模板引擎之Freemarker》学习总结

    摘要:时间年月日星期日说明本文部分内容均来自慕课网。整体目录结构如下项目文件用于数据持久化配置项目配置配置视图解析器配置静态资源映射配置配置配置自定义指令配置解析器配置,类似于项目启动类新建,注册配置类,并将其和当前关联。 时间:2017年3月19日星期日说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学示例源码:无个人学习源码:https://githu...

    xumenger 评论0 收藏0
  • 课网_Spring Boot热部署》学习总结

    时间:2017年12月01日星期五说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com 教学源码:无 学习源码:https://github.com/zccodere/s... 第一章:课程介绍 1-1 课程介绍 热部署的使用场景 本地调式 线上发布 热部署的使用优点 无论本地还是线上,都适用 无需重启服务器:提高开发、调式效率、提升发布、运维效率、降低运维成本 前置...

    Channe 评论0 收藏0

发表评论

0条评论

hqman

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<