第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

慕課網(wǎng)《Spring Boot 2.0深度實(shí)踐-初遇Spring Boot》學(xué)習(xí)總結(jié)

標(biāo)簽:
Java SpringBoot

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

时间:2018年04月08日星期日
说明:本文部分内容均来自慕课网。@慕课网:http://idcbgp.cn 
教学源码:无 
学习源码:https://github.com/zccodere/study-imooc
第一章:课程介绍
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 运行
點(diǎn)擊查看更多內(nèi)容
1人點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
JAVA開(kāi)發(fā)工程師
手記
粉絲
138
獲贊與收藏
532

關(guān)注作者,訂閱最新文章

閱讀免費(fèi)教程

感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消