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 环境。
- 本文代码地址:
1.2.2 创建工程 “Hello Spring Boot”
- 在 IDEA 中,利用 Spring Initializr 插件进行创建;
- 访问网站 进行在线生成Spring Boot项目打包下载到本地;
- 下载安装 Spring Boot CLI脚手架进行快速创建。
1.2.2 Creating the POM
4.0.0 com.hw spring-boot-demo 0.0.1-SNAPSHOT jar spring-boot-demo Demo project for Spring Boot org.springframework.boot spring-boot-starter-parent 2.1.0.RELEASE UTF-8 UTF-8 1.8 org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-maven-plugin
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;@SpringBootApplicationpublic class SpringBootDemoApplication { public static void main(String[] args) { SpringApplication.run(SpringBootDemoApplication.class, args); }}
1.2.3.1 @SpringBootApplication 注解
- 该注解用标注启动类,被标注的类为一个配置类,并会触发自动配置和 Starter 组件扫描。
- @SpringBootApplication = @Configuration + @EnableAutoConfiguration + @ComponentScan
- 注解的职责如下:
- 在被该注解修饰的类中,可以用 @Bean 注解来配置多个Bean。应用启动时,Spring 容器会加载Bean并注入到 Spring 容器;
- 启动 Spring 上下文的自动配置。基于依赖和定义的 Bean 会自动配置需要的 Bean 和类;
- 扫描被 @Configuration 修饰的配置类。也会扫描 Starter 组件的配置类,并启动加载其默认配置。
1.2.3.2 SpringApplication 类
大多数情况下,在 main 方法中调用 SpringApplication 类的静态方法 run(Class, String[]) ,用来引导启动 Spring 应用程序。默认情况下,该类的职责会执行如下步骤:
- 创建应用上下文 ApplicationContext 实例;
- 注册 CommandLinePropertySource,将命令行参数赋值到 Spring 属性;
- 刷新应用上下文,加载所有单例;
- 触发所有 CommandLineRunner Bean。
在实际开发中如果需要自定义创建高级的配置,可以通过 run(Class, String[]) 方法的第二个参数,并以 String 数组的形式传入。
1.2.4 开发工程之 Hello 控制层类
- 在pom.xml 文件中添加
spring-boot-starter-web
依赖。
org.springframework.boot spring-boot-starter-web
- 在com.hw.springbootdemo下面(SpringBootDemoApplication.java同级)新建web包,并添加HelloController.java文件,内容如下,添加控制层代码。
- 访问
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 对控制层类的方法进行标注,职责是指定响应体为方法的返回值。上面代码中,案例是以字符串的形式返回,自然可以使用其他复杂对象作为返回体。