1. 程式人生 > >springboot原理

springboot原理

1.1.什麼是springboot

SpringBoot是Spring專案中的一個子工程

其實人們把Spring Boot 稱為搭建程式的腳手架。其最主要作用就是幫我們快速的構建龐大的spring專案,並且儘可能的減少一切xml配置,做到開箱即用,迅速上手,讓我們關注與業務而非配置。

讓我們寫更少的程式碼!

1.2.為什麼要學習SpringBoot

java一直被人詬病的一點就是臃腫、麻煩。當我們還在辛苦的搭建專案時,可能Python程式設計師已經把功能寫好了,究其原因注意是兩點:

  • 一個是複雜的配置,

    需要些大量的配置,這就需要大量的程式碼!讓整個專案看著一點都不優雅!

  • 一個是混亂的依賴管理。

    決定專案裡要用哪些庫就已經夠讓人頭痛的了,

    主要是依賴版本之間的衝突,這難題實在太棘手。並且,依賴管理也是一種損耗

而SpringBoot讓這一切成為過去!

Spring Boot 簡化了基於Spring的應用開發,只需要“run”就能建立一個獨立的、生產級別的Spring應用。Spring Boot為Spring平臺及第三方庫提供開箱即用的設定(提供預設設定,存放預設配置的包就是啟動器starter),這樣我們就可以簡單的開始。多數Spring Boot應用只需要很少的Spring配置。

我們可以使用SpringBoot建立java應用,並使用java –jar 啟動它,就能得到一個生產級別的web工程。

1.3.SpringBoot的特點

Spring Boot 主要目標是:

  • 為所有 Spring 的開發者提供一個非常快速的、廣泛接受的入門體驗

  • 開箱即用(啟動器starter-其實就是SpringBoot提供的一個jar包),但通過自己設定引數(.properties),即可快速擺脫這種方式。

  • 提供了一些大型專案中常見的非功能性特性,如內嵌伺服器、安全、指標,健康檢測、外部化配置等

  • 絕對沒有程式碼生成,也無需 XML 配置。

1.4.SpringBoot自動配置的原理

1.我們需要要使用springboot首先需要引入springboot父類工程

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.0.RELEASE</version>
</parent>

2.我們開發一個web專案需要引入一個web啟動類springboot會給我們自動配置

 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
 </dependency>

啟動類 這個類放在靠前的包下

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

springboot的執行原理:

  • 註解:@SpringBootApplication 啟動類上的註解相當於@ComponentScan、@EnableAutoConfiguration、@SpringBootConfiguration這三個註解

    進入@SpringBootApplication 註解上有三個註解

    • 1)@ComponentScan(掃描spring元件註解)

      掃描spring元件的註解,如果不配置屬性的話他會掃描所在包以及子包,所以一般我們會將啟動類放在靠前的包下

    • 2)@EnableAutoConfiguration(開啟自動配置類註解)

      SpringBoot內部對大量的第三方庫或Spring內部庫進行了預設配置,這些配置是否生效,取決於我們是否引入了對應庫所需的依賴,如果有那麼預設配置就會生效。

    • 3)@SpringBootConfiguration(宣告是springBoot的配置類)

      進入這個註解發現這個註解上有一個@configuration註解,是宣告這是一個配置類的意思,spring會自動掃描添加了@configuration的類 所以我們要把啟動類放在最前面的包!因為他預設掃描本包和本包以下的所有子包中的spring元件!

    小結:SpringBoot為我們提供了預設配置,而預設配置生效的條件一般有兩個:

    • 1)引入了相關依賴 (web專案,就需要引入web啟動器,這樣springboot內部會做出判斷,這樣自定義配置就會生效)

    • 2)你自己沒有配置Bean(比如資料來源DataSource)如果spring掃描到你自己注入了,他就不會啟動預設的資料來源連線池

      所以,我們如果不想配置,只需要引入依賴即可,而依賴版本我們也不用操心,因為只要引入了SpringBoot提供的stater(啟動器),就會自動管理依賴及版本了。

      因此,玩SpringBoot的第一件事情,就是找啟動器,SpringBoot提供了大量的預設啟動器

      全域性配置:

      另外,SpringBoot的預設配置,都會讀取預設屬性,而這些屬性可以通過自定義application.properties檔案來進行覆蓋。這樣雖然使用的還是預設配置,但是配置中的值改成了我們自定義的。

      因此,玩SpringBoot的第二件事情,就是通過application.properties來覆蓋預設屬性值,形成自定義配置。我們需要知道SpringBoot的預設屬性key,非常多.

      屬性檔案支援兩種格式,application.properties和application.yml

      yml的語法例項:

      jdbc:
        driverClassName: com.mysql.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/leyou
        username: root
        password: 123
      ​
      server:
        port: 80