为了后继的 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配置详解