欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

spring boot原理分析(一):spring boot原理综述

程序员文章站 2022-05-04 17:48:42
...

    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,然后就可以完成了。生成的项目目录如下。
spring boot原理分析(一):spring boot原理综述
生成之后,可以自己在项目中添加一个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原理综述
这样一个简单的spring boot的服务就完成了。以上描述比较简单,目的是为了展示spring boot的不同之处。如果接触过tomcat + spring mvc的项目的开发和部署,就会发现spring boot在这个基础上少了很多繁琐的配置。
    因此学习spring boot的原理,主要需要关注三个大的方面:

  1. 内置tomcat和 spring mvc的默认配置的实现
  2. spring boot中内置tomcat和spring mvc应用的启动
  3. 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 原理综述性的文章