1. 程式人生 > 實用技巧 >SpringBoot系列(一)

SpringBoot系列(一)

SpringBoot簡述

目錄

一. 什麼是SpringBoot?


springboot是一個基於spring所有功能的工具框架,能夠讓一個spring框架的開發過程簡化再簡化,能應對非常多的開發場景,實現自動配置。例如最長涉及的web應用,springboot幫住完成了web容器的配置,springmvc,spring的配置

二. Springboot的特點


  1. 獨立執行spring容器

    spring容器的執行一般都需要別的容器的支援,比如開發一個web應用,要由第三方web容器支援。而springboot可以獨立執行,在main方法中直接載入springboot 執行程式碼。

  2. 內嵌servlet

    springboot為web工程提供了內嵌的web容器,預設使用tomcat,可以修改成jetty和undertow,並且按照習慣進行預設配置,例如埠號8080 專案訪問路徑 /.結合第一個特點,web工程就可以不用封裝war包訪問外部的web容器執行,直接使用jar包執行。

  3. 簡化依賴

    springboot能夠實現它的獨有的特點,是因為它在spring基礎之上擴充套件了非常龐大的程式碼.導致要想使用springboot必須依賴大量的資源.這樣極其不方便的。所以springboot為開發者準備了豐富環境的簡化依賴。例如:我們要開發一個web應用(spring-context,spring-webmvc,jackson,loggings等等),在springboot只要想開發一個web應用,只需要依賴一個spring-boot-starter-web,實現依賴的傳遞。

  4. 自動配置

    springboot最核心的特點,就是自動配置。它為大多數開發場景準備對應的配置邏輯.在使用springboot開發時,可以不考慮如何配置這些技術,環境,只需要按照springboot提供的邏輯準備你的技術,環境。

    例如:自動完成web容器的配置。簡化了埠,程式訪問根目錄,靜態資源訪問前後綴拼接等等配置內容。自動完成了datasource資料來源配置,你一旦需要持久層資料來源連線資料庫,只需要提供對應屬性就可以了。

三. SpringBoot核心註解


springboot工程中總是在新增一個核心註解@SpringBootApplication,它是一個springboot框架提供的組合註解,一共組合了3個註解:

  1. SpringBootConfiguration

    本質上,這個註解就是一個spring的配置註解@Configuration。繼承自@Configuration(一個配置註解所在的類,相當於與一個xml配置檔案的功能)

  2. ComponentScan

    相當於一個xml配置檔案中的<context:component-scan>標籤,預設將當前類所在的包作為basePackage使用。

    上述兩個註解同時存在,相當於使用了一個xml配置檔案。

    <beans>
    	<context:component-scan basePackage="org.example"/>
    </beans>
    
    

    兩個註解一組合,能讓我們在程式碼中自定義的各種 @Component @Controller @Service註解所在類生成在IOC容器。

  3. EnableAutoConfiguration

    每一個版本的springboot都會擴充套件非常龐大的**AutoConfiguration的配置類,每一個類都相當於是一個xml.@EnableAutoConfiguration的作用就是匯入這些配置類,使得在載入一個springboot啟動類時,不僅具備掃描自定義業務層註解的功能,還具備載入springboot自動配置邏輯。

    springboot當前版本都準備了哪些自動配置類,可以從一個spring.factories的檔案中觀察到。在spring-boot-autoconfigure的jar包中,找到META-INF資料夾,從中觀察開啟spring.factories。

四. 其他註解


Ⅰ. Conditional的組合註解

  • @ConditionalOnBean:當容器裡有指定Bean的條件下
  • @ConditionalOnClass:當類路徑下有指定的類的條件下
  • @ConditionalOnExpression:基於SpEL表示式為true的時候作為判斷條件才去例項化
  • @ConditionalOnJava:基於JVM版本作為判斷條件
  • @ConditionalOnJndi:在JNDI存在的條件下查詢指定的位置
  • @ConditionalOnMissingBean:當容器裡沒有指定Bean的情況下
  • @ConditionalOnMissingClass:當容器裡沒有指定類的情況下
  • @ConditionalOnWebApplication:當前專案是Web專案的條件下
  • @ConditionalOnNotWebApplication:當前專案不是Web專案的條件下
  • @ConditionalOnProperty:指定的屬性是否有指定的值
  • @ConditionalOnResource:類路徑是否有指定的值
  • @ConditionalOnOnSingleCandidate:當指定Bean在容器中只有一個,或者有多個但是指定首選的Bean

這些註解都組合了@Conditional註解,只是使用了不同的條件組合最後為true時才會去例項化需要例項化的類,否則忽略過濾掉。

Ⅱ. @ConfigurationProperties

從配置檔案中繫結屬性到對應的bean上,與Value既有聯絡又有區別

  1. 自定義字首(即,匹配掉字首後的名稱才對應Bean屬性)
  2. 可以多級賦值
  3. 如果接受的是List型別,可以自動擷取逗號

五. 啟動原理(自動配置)


Spring Boot啟動的時候會通過@EnableAutoConfiguration註解找到META-INF/spring.factories配置檔案中的所有自動配置類,並對其進行載入,而這些自動配置類都是以AutoConfiguration結尾來命名的,它實際上就是一個JavaConfig形式的Spring容器配置類,它能通過以Properties結尾命名的類中取得在全域性配置檔案中配置的屬性如:server.port,而XxxxProperties類是通過@ConfigurationProperties 註解與全域性配置檔案中對應的屬性進行繫結的。