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
-