spring boot支持三种Servlet容器+Servlet的模式,tomcat + spring mvc的模式只是其中的一种,另外两种分别是Undertow+Servlet和Jetty+Servlet。我主要在tomcat + spring mvc的架构下开发,因此关于spring boot的原理的探究也会限定在这个模式。
在我的“tomcat + spring mvc原理”的系列文章中,已经对这tomcat和spring mvc的基本原理实现做了介绍(旧坑快填完了,开个新坑O,o)。而spring boot内置了一个嵌入的tomcat包,项目可以直接生成jar包,执行时使用类似java xxxx.jar的命令就能启动。当然也可以设置打包成war包,部署在独立tomcat的服务目录下,这样内置的tomcat就不会被调用。
那么spring boot整合的版本相对于原版有什么优化呢?首先我们来体验一下自动生成的spring boot的应用,这样能够和独立部署的tomcat + spring mvc的模式进行比较。使用idea生成一个spring boot的demo非常简单。新建工程里选定Spring Initializer,Initializer service URL使用默认的https://start.spring.io/ ,项目的基本设置不用改,只需要在选定依赖时选择Developer Tools,勾选Spring Boot DevTools,然后就可以完成了。生成的项目目录如下。
生成之后,可以自己在项目中添加一个DemoController类,代码如下:
package com.example.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoController {
@GetMapping("/")
public String test(){
return "index";
}
}
可以在配置文件application.properties里看到唯一一条配置语句:
server.port=8080
这意味着这个服务开启的端口是8080。spirng boot使用内置的tomcat包,不需要在idea中配置tomcat环境,就能直接启动。启动后,在浏览器输入127.0.0.1:8080,可以访问DemoController的test接口,浏览器会返回:
这样一个简单的spring boot的服务就完成了。以上描述比较简单,目的是为了展示spring boot的不同之处。如果接触过tomcat + spring mvc的项目的开发和部署,就会发现spring boot在这个基础上少了很多繁琐的配置。
因此学习spring boot的原理,主要需要关注三个大的方面:
- 内置tomcat和 spring mvc的默认配置的实现
- spring boot中内置tomcat和spring mvc应用的启动
- tomcat原理和spring mvc的原理
spring boot是在独立部署的tomcat + spring mvc的架构上的优化和延伸,第1和第2部分也就是spring boot的主要内容。自动化配置包括的内容有:
- jar包引入:spring boot支持一系列pom的starter,比如上面自动创建的spring boot demo,只引入了依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
而在这个spring-boot-starter-web中打包了spring-boot-starter(这里面又包括了spring和spring boot自动配置相关的jar包等)、spring-boot-starter-json 、spring-boot-starter-tomcat、spring-webmvc等。当然也可以不使用这种捆绑的jar包依赖,自行定制。
-
bean注入:一个spring boot项目往往会包含多种外部依赖,比如数据库、redis等等,spring boot使用AutoConfiguration机制,在支持bean条件依赖的基础上注入bean。
-
参数配置简化:spring mvc开发比较麻烦的点在于web.xml和servlet.xml的配置,spring boot通过bean注入实现类的配置,通过内部设置默认配置和外部properties、yml文件或者factories文件等实现配置的简便性和灵活性
第3部分是spring mvc开发通用的知识,而这部分的源码的分析,在“tomcat + spring mvc原理”系列文章里已经做了比较详细的叙述,所以关于spring boot的原理系列,只会着重讨论第1和第2部分的原理实现。如果想对tomcat和spring mvc整体原理有个初略的认识,可以查阅tomcat原理综述和spring mvc 原理综述性的文章。
来源:CSDN
作者:帆云羽
链接:https://blog.csdn.net/u013212754/article/details/103855398