研究Spring boot也有一小段时间了,最近会将研究东西整理一下给大家分享,大概会有10~20篇左右的博客,整个系列会以一个简单的博客系统作为基础,因为光讲理论很多东西不是特别容易理解,并且如果每次通过一个简单的小程序也无法系统的把握好一些知识点,所以就以一个简单的系统作为基础来讲,看看通过spring boot如何实现一个完整系统。本系列除了Spring boot基本的知识点之外,还会涉及到Spring boot与数据库、缓存(redis)、消息队列等的结合以及多实例部署等方面的内容。有兴趣的同学可以关注一下。
二、Spring boot 简介
Spring boot 从名称上就可以看出,它是基于Spring的一个框架,所以不熟悉Spring的同学还是得先去学习一下Spring。其次,Spring boot帮我们集成很多常用的功能,使得整个配置更加简单。用过Spring的同学应该知道,虽然Spring一直在努力的减少配置的复杂性,但是,配置一个完全可用的(web)环境还是挺麻烦的,比如需要配置日志、数据库、缓存等,然后再配置tomcat,最后将程序发布到tomcat目录下。而Spring boot则帮我们大大简化了这个过程,它提供了很多starter,只要引入对应的jar包就可以了。例如,我们需要集成tomcat,只需要引入tomcat的starter即可:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
备注:本文的例子都是基于Maven来实现的,所以如果不熟悉Maven,可以先去看下怎么用,如果熟悉gradle的话,也可以根据情况对配置做相应调整。
我们可以从官方文档上查看Spring boot提供的starter:
这里我只截取了一小部分,可以看到Spring boot支持缓存、批处理、mq、es等等,完整的列表参考官方文档。其他就不多解释了,后续通过示例来讲解整个Spring boot功能,我们先看Spring boot来如何实现一个web版的Hello World!
三、Hello World程序
3.1 Hello World 源码
第一步:导入jar包
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
第二步:编写控制器类
package com.pandy.blog;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import Java.util.HashMap;
import java.util.Map;
@Controller
public class HelloWorld {
@RequestMapping("/hello")
@ResponseBody
public Map<String, Object> hello() {
Map<String, Object> map = new HashMap<>();
map.put("hello", "world");
return map;
}
}
第三步:编写启动类(入库)
package com.pandy.blog;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
运行该类的main方法,然后访问:8080/hello,就可以看到如下结果:
是不是感觉很开心?一行配置都没有,就可以直接运行一个Web应用。不过开心完以后有没有想过这是怎么实现的呢?接下来我们一行一行解析上面的代码,虽然行数不多,但是还是有很多东西值得我们去学习和理解的。
3.2 pom文件分析
我们先从pom文件入手,pom文件里面只引入了两个依赖项。第一个是spring-boot-starter-parent,熟悉Maven的朋友应该知道,Maven也可以跟类一样,从父pom文件中继承配置。我们可以看下spring-boot-starter-parent的pom文件,由于篇幅问题,这里面只看两部分,其他东西比较容易理解,大家可以自己读一下。第一个部分是: