为了后继的 Spring Cloud 学习和进阶,我们需要先行了解 Spring Boot。
1.前言
1.1 认识 Spring Boot
Spring Boot 是由 Pivotal 团队提供的全新框架。她:
- 从2002年开始,Spring 一直在飞速的发展,而 Java EE 使用 Spring 却逐渐变得笨重起来,大量的 XML 文件存在于项目之中,繁琐的配置,整合第三方框架的配置问题,导致了开发和部署效率的降低。
- Spring Boot 是伴随着 Spring 4.0 诞生的,从字面理解,Boot 是引导的意思,因此 Spring Boot 旨在帮助开发者快速搭建 Spring 框架。Spring Boot 继承了原有 Spring 框架的优秀基因,使 Spring 在使用中更加方便快捷。
- Spring Boot 并不是用来替代 Spring 的解决方案,而是和 Spring 框架紧密结合用于提升 Spring 开发者体验的工具。同时它集成了大量常用的第三方库配置,简化 Spring 应用搭建和开发。
1.2 了解 Spring Boot
做为一个优秀的轻量级框架,她的特点突出:
- 轻量快捷:门槛低,易上手,致力于简洁,让开发者写更少的配置,更快的搭建和启动项目
- 自动化配置:Spring Boot 为每一个 Starter 都提供了自动化的 Java 配置类,用来替代我们传统 Spring 应用在 XML 中繁琐且并不太变化的 Bean 配置
- 嵌入式容器:内嵌 Tomcat 等 Web 容器
- 简化依赖管理:对功能性模块进行了划分和封装,使用简单,避免传统 Spring 应用产生的大量依赖关系而引发的 JAR 冲突;Java Config 的方式,对 Spring 进行配置,避免了 XML 配置以及复杂的依赖管理
2.进击
既然 Spring Boot 那么好,那我们就马上来一发吧~
2.1 准备工作
我们需要:
- JDK 1.8 或以上
- Maven 3.0 或以上
- IntelliJ IDEA
2.2 构建工程
打开 IDEA,菜单栏 File >> New >> Project >> Spring Initializr >> [Next]
2.2.1 Project SDK:1.8;choose Initializr Service URL:Default >> [Next]
2.2.2 填写 Group、Artifact 等项目信息 >> [Next]
2.2.3 Dependencies:项目依赖选择,选择 Web 并钩上; Spring Boot 版本选择,这里我使用的是 2.0.4 >> [Next]
2.2.4 项目名称、路径设置 >> [Finish]
如此,一个画风干净的 Spring Boot Demo 就映入眼帘。
2.3 目录结构
└─wei-springboot
│ mvnw // 全名是maven wrapper,它的原理是在maven-wrapper.properties文件中记录你要使用的maven版本
│ mvnw.cmd // 当用户执行mvnw clean命令时,发现当前用户的maven版本和期望的版本不一致,那么就下载期望的版本,然后用期望的版本来执行mvn命令,比如mvn clean
│ pom.xml // maven 依赖配置文件
│ wei-springboot.iml // idea的配置文件
│
├─.mvn
│ └─wrapper
│ maven-wrapper.jar // 当前使用的maven jar包
│ maven-wrapper.properties // 记录你要使用的Maven版本
│
└─src // java源代码目录
├─main
│ ├─java
│ │ └─com
│ │ └─wei
│ │ WeiSpringbootApplication.java // 启动类,程序入口
│ │
│ └─resources // 资源文件
│ │ application.properties // 配置文件
│ │
│ ├─static // 静态资源
│ └─templates // 模板资源
└─test
└─java
└─com
└─wei
WeiSpringbootApplicationTests.java // 测试类
2.4 文件解读
2.4.1 pom.xml
<?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.wei</groupId>
<artifactId>wei-springboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>wei-springboot</name>
<description>Demo project for Spring Boot</description>
<!--Spring Boot父级依赖,会自动为我们引入相关Maven默认依赖,使用它之后,常用的包依赖可以省去version标签-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.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-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!--Spring Boot Maven插件-->
<!--1.把项目打包成一个可执行的JAR,包括把应用程序的所有依赖打入JAR文件内,并为JAR添加一个描述文件,其中的内容能让你用java -jar来运行应用程序-->
<!--2.搜索public static void main()方法来标记为可运行类-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
查看 pom 依赖,我们可以发现 spring-boot-starter-web 不仅包含 spring-boot-starter,还自动开启了 web 功能。所以,Spring Boot 提供了很多“开箱即用”的依赖模块,都是以 spring-boot-starter-xxx 作为命名。
具体引入了哪些默认依赖,可以查看电脑本地路径:
C:\Users\用户.m2\repository\org\springframework\boot\spring-boot-dependencies\2.0.4.RELEASE\spring-boot-dependencies-2.0.4.RELEASE.pom
2.4.2 Application启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* 注解@SpringBootApplication是Sprnig Boot项目的核心注解,主要目的是开启自动配置
*/
@SpringBootApplication
public class WeiSpringbootApplication {
/**
* 标准的Java应用的main的方法,主要作用是作为项目启动的入口
* @param args
*/
public static void main(String[] args) {
SpringApplication.run(WeiSpringbootApplication.class, args);
}
}
@SpringBootApplication:申明让 Spring 自动给程序进行必要的配置,等同于同时使用@Configuration,@EnableAutoConfiguration 和 @ComponentScan 三个配置。
- @Configuration:标识这个类可以使用 Spring IOC 容器作为 bean 定义的来源,相当于 XML 中的 beans 标签
- @EnableAutoConfiguration:让 Spring Boot 根据应用所声明的依赖来对 Spring 框架进行自动配置,由于 spring-boot-starter-web 添加了 Tomcat 和 Spring MVC,所以 auto-configuration 将假定你正在开发一个 web 应用并相应地对 Spring 进行设置
- @ComponentScan:表示将该类自动发现(扫描)并注册为 Bean,可以自动收集所有的 Spring 组件(@Component , @Service , @Repository , @Controller 等),包括 @Configuration 类
至此,我们只是创建了一个名叫 xxxx 的 Spring Boot 工程。
但是,一个简单的基础的 Spring Boot 工程确实已经被我们创建完成了。
3.论证
3.1 跑起来吧
添加一个 Controller 类,通过发送 http 请求来验证一下我们的成果~
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 注解@RestController,相当于@Controller和@ResponseBody两个注解的结合,使用这个注解的类里面的方法都以json格式输出
*/
@RestController
public class DemoController {
@RequestMapping(value = "/demo/hi")
public String getDemoHi() {
String result = "Hello, Spring Boot";
System.out.println(result);
return result;
}
}
写好后,我们启动主程序 WeiSpringbootApplication。
从下图可以看出 Web 容器是 Tomcat。因为没有对项目做任何配置,所以使用的是默认端口 8080。
打开浏览器,输入URL地址 http://localhost:8080/demo/hi
如你所见,我们可以看到浏览器显示:
Hello, Spring Boot
如你所想,我们没有做任何的 web.xml 配置,也没有做任何的 spring mvc 的配置(Spring Boot帮你做了),也没有配置 Tomcat(Spring Boot内嵌了Tomcat),完全体现不出我们对传统 Spring 的深深的造诣(邪恶之笑),有木有很简单~
3.2 单元测试
import com.wei.controller.demo.DemoController;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoControllerTests {
private MockMvc mockMvc;
@Before
public void setUp() {
mockMvc = MockMvcBuilders.standaloneSetup(new DemoController()).build();
}
@Test
public void testDemoHi() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/demo/hi").accept(MediaType.APPLICATION_JSON)).
andExpect(MockMvcResultMatchers.status().isOk()).
andDo(MockMvcResultHandlers.print()).andReturn();
}
}
运行此测试用例前,需要先运行工程的启动类噢~ 相信你也会看到测试通过的报告
4.总结
官方网站:https://spring.io/projects/spring-boot
Spring Boot 稳定版可以参考1.5.15,2.0.4
Spring Boot 1.x 生命周期已结束,这意味着他们将在2019年8月1日前的 12 个月内逐渐停止维护。
Spring Boot 2.0 及更高版本需要 Java 8+
配置变得简单了,编码得的简单了,部署变的简单了。
她启了各种自动装配,不用写各种配置文件,引入相关的依赖就能迅速搭建起一个 WEB 工程。
就好像,当你用了 IDEA,就再也不想回到 Eclipse 时代一样美妙。
但是在此,她的特性还没有完全显现,还需要我们进一步去发现,去实践,去验证,去总结
下一节,请继续关注:SpringBoot进击 | 二浅出:Spring Boot配置详解