2、Spring Boot 2.x 快速入门

帅比萌擦擦* 提交于 2020-03-11 11:55:54

1.2 Spring Boot 快速入门

1.2.1 开发环境和工具

  • JDK 1.8+:Spring Boot 2.x 要求 JDK 1.8 环境及以上版本。另外,Spring Boot 2.x 只兼容 Spring Framework 5.0 及以上版本;
  • Maven 3.2+:为 Spring Boot 2.x 提供了相关依赖构建工具是 Maven,版本需要 3.2 及以上版本。使用 Gradle 则需要 1.12 及以上版本。
  • IntelliJ IDEA:IntelliJ IDEA (简称 IDEA)是常用的开发工具,也是本文推荐使用的,同样使用 Eclipse IDE,也能完成本文的实践案例。另外,本文的工程都会在 GitHub 上开源,如需要请自行安装 Git 环境。
  • 本文代码地址: https://github.com/JiaoHongwei/Spring-Boot-Demos

1.2.2 创建工程 “Hello Spring Boot”

  • 在 IDEA 中,利用 Spring Initializr 插件进行创建;
  • 访问网站 https://start.spring.io/ 进行在线生成Spring Boot项目打包下载到本地;
  • 下载安装 Spring Boot CLI脚手架进行快速创建。

1.2.2 Creating the 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.hw</groupId>
    <artifactId>spring-boot-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>spring-boot-demo</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.0.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</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

1.2.3 开发工程之应用启动类

在工程 src 目录中,已经自动创建了包目录 com.hw.springbootdemo ,其包下自动创建了 Spring Boot 应用启动类SpringBootDemoApplication,代码如下:

package com.hw.springbootdemo;

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

@SpringBootApplication
public class SpringBootDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootDemoApplication.class, args);
    }
}
1.2.3.1 @SpringBootApplication 注解
  • 该注解用标注启动类,被标注的类为一个配置类,并会触发自动配置和 Starter 组件扫描。
  • @SpringBootApplication = @Configuration + @EnableAutoConfiguration + @ComponentScan
  • 注解的职责如下:
    1. 在被该注解修饰的类中,可以用 @Bean 注解来配置多个Bean。应用启动时,Spring 容器会加载Bean并注入到 Spring 容器;
    2. 启动 Spring 上下文的自动配置。基于依赖和定义的 Bean 会自动配置需要的 Bean 和类;
    3. 扫描被 @Configuration 修饰的配置类。也会扫描 Starter 组件的配置类,并启动加载其默认配置。
1.2.3.2 SpringApplication 类

大多数情况下,在 main 方法中调用 SpringApplication 类的静态方法 run(Class, String[]) ,用来引导启动 Spring 应用程序。默认情况下,该类的职责会执行如下步骤:

  1. 创建应用上下文 ApplicationContext 实例;
  2. 注册 CommandLinePropertySource,将命令行参数赋值到 Spring 属性;
  3. 刷新应用上下文,加载所有单例;
  4. 触发所有 CommandLineRunner Bean。

在实际开发中如果需要自定义创建高级的配置,可以通过 run(Class, String[]) 方法的第二个参数,并以 String 数组的形式传入。

1.2.4 开发工程之 Hello 控制层类

  • 在pom.xml 文件中添加spring-boot-starter-web依赖。
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
  • 在com.hw.springbootdemo下面(SpringBootDemoApplication.java同级)新建web包,并添加HelloController.java文件,内容如下,添加控制层代码。
  • 访问 http://localhost:8080/api/v1/hello
package com.hw.springbootdemo.web;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Description TODO
 * @Author hw
 * @Date 2018/11/18 20:47
 * @Version 1.0
 */
@RestController
@RequestMapping("api/v1")
public class HelloController {

    @GetMapping("hello")
    public String hello() {
        return "Hello Spring Boot!";
    }
}
  • 上面定义了简单的 REST API 服务,即 GET:/api/v1/hello。表示该 Hello 控制层 hello() 方法会提供请求路径为 /api/v1/hello 和请求方法为 GET 的 HTTP 服务接口。
  • Spring 4.0 的注解 @RestController 支持实现 REST API 控制层。本质上,该注解结合了 @Controller 和 @ResponseBody 的功能。
  • @GetMapping = @RequestMapping(value = "hello",method = RequestMethod.GET),类似的还有@PostMapping、@PutMapping、@DeleteMapping。
1.2.4.1 @Controller 注解

@Controller 对控制层类进行标注,职责是使控制层可以处理 HTTP 请求,简单可以理解为,使控制层能接受请求,处理请求并响应。

1.2.4.2 @RequestMapping 注解
  • @RequestMapping 对控制层类的方法进行标注,==职责是标明方法对应的 HTTP 请求路由的关系映射==。
  • 参数 value 主要请求映射地址,可接受多个地址。参数 method 标注 HTTP 方法,常用如: GET、POST、HEAD、OPTIONS、PUT、PATCH、DELETE、TRACE。
  • 默认是 GET HTTP 方法,在 GET 请求的情况下,可以缩写成 @RequestMapping(value = "/book/hello") 。
  • Spring 4 支持直接使用 XXXMapping 形式的注解,比如上面代码可以写成 @GetMapping("/book/hello")。
1.2.4.3 @ResponseBody 注解

@ResponseBody 对控制层类的方法进行标注,职责是指定响应体为方法的返回值。上面代码中,案例是以字符串的形式返回,自然可以使用其他复杂对象作为返回体。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!