SpringBoot进击 | 一浅出:Spring Boot简单快速上手书

为了后继的 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]
SpringBoot进击 | 一浅出:Spring Boot简单快速上手书_第1张图片
如此,一个画风干净的 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

<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.0modelVersion>

	<groupId>com.weigroupId>
	<artifactId>wei-springbootartifactId>
	<version>0.0.1-SNAPSHOTversion>
	<packaging>jarpackaging>

	<name>wei-springbootname>
	<description>Demo project for Spring Bootdescription>

	
	<parent>
		<groupId>org.springframework.bootgroupId>
		<artifactId>spring-boot-starter-parentartifactId>
		<version>2.0.4.RELEASEversion>
		<relativePath/> 
	parent>

	<properties>
		<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
		<java.version>1.8java.version>
	properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.bootgroupId>
			<artifactId>spring-boot-starter-webartifactId>
		dependency>

		<dependency>
			<groupId>org.springframework.bootgroupId>
			<artifactId>spring-boot-starter-testartifactId>
			<scope>testscope>
		dependency>
	dependencies>

	<build>
		<plugins>
			
			
			
			<plugin>
				<groupId>org.springframework.bootgroupId>
				<artifactId>spring-boot-maven-pluginartifactId>
			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
SpringBoot进击 | 一浅出:Spring Boot简单快速上手书_第2张图片

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。
SpringBoot进击 | 一浅出:Spring Boot简单快速上手书_第3张图片
打开浏览器,输入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配置详解


你可能感兴趣的:(Spring,Boot,Spring,Boot,Spring,Cloud,Spring,微服务架构,敏捷开发)