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

    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和tomcat+spring mvc原理綜述-demo.png
生成之後,可以自己在項目中添加一個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原理綜述-index.jpeg
這樣一個簡單的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 原理綜述性的文章

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章