SpringBoot-基本概念以及如何定義starter

SpringBoot能夠改變開發Spring應用程序的方式:

  • Spring Boot Starter:它將常用的依賴分組進行了整合,將其合併 到一個依賴中,這樣就可以一次性添加到項目的Maven或Gradle 構建中;
  • Spring Boot的自動配置特性利用了Spring 4對條件化配 置的支持,合理地推測應用所需的bean並自動化配置它們;
  • 自動配置:命令行接口(Command-line interface,CLI):Spring Boot的CLI發揮了Groovy編程語言的優勢,並結合自動配置進一步簡化Spring應用的開發;
  • Actuator:它爲Spring Boot應用添加了一定的管理特性。

各種官方starter地址

很多Starter引用了其他的Starter。大多數的Starter都會引用spring-boot-starter,它實際上是一個基礎的Starter(當然,它也依賴了logging Starter)。依賴是傳遞性的

關於自動配置

Spring Boot的Starter減少了構建中依賴列表的長度,而Spring Boot的自動配置功能則削減了Spring配置的數量。它在實現時,會考慮應用中的其他因素並推斷你所需要的Spring配置。
比如我們要將Thymeleaf模板作爲Spring MVC的視圖,至少需要三個bean:ThymeleafViewResolver、SpringTemplateEngine和TemplateResolver。但是,使用Spring Boot自動配置的話,我們需要做的僅僅是將Thymeleaf添加到項目的類路徑中。如果Spring Boot探測到Thymeleaf位於類路徑中,它就會推斷我們需要使用Thymeleaf實現Spring MVC的視圖功能,並自動配置這些bean。Spring Boot Starter也會觸發自動配置。

例如,在Spring Boot應用中,如果我們想要使用Spring MVC的話,所需要做的僅僅是將Web Starter作爲依賴放到構建之中。將Web Starter作爲依賴放到構建中以後,它會自動添加Spring MVC依賴。如果Spring Boot的Web自動配置探測到Spring MVC位於類路徑下,它將會自動配置支持Spring MVC的多個bean,包括視圖解析器、資源處理器以及消息轉換器(等等)。我們接下來需要做的就是編寫處理請求的控制器(Controller)。

通過Actuator獲取瞭解應用內部狀況

Spring Boot Actuator所完成的主要功能就是爲基於Spring Boot的應用添加多個有用的管理端點。這些端點包括以下幾個內容。

  • GET /autoconfig:描述了Spring Boot在使用自動配置的時候,所做出的決策;
  • GET /beans:列出運行應用所配置的bean;
  • GET /configprops:列出應用中能夠用來配置bean的所有屬性及其當前的值;
  • GET /dump:列出應用的線程,包括每個線程的棧跟蹤信息;
  • GET /env:列出應用上下文中所有可用的環境和系統屬性變量;
  • GET /env/{name}:展現某個特定環境變量和屬性變量的值;
  • GET /health:展現當前應用的健康狀況;
  • GET /info:展現應用特定的信息;
  • GET /metrics:列出應用相關的指標,包括請求特定端點的運行次數;
  • GET /metrics/{name}:展現應用特定指標項的指標狀況;
  • POST /shutdown:強制關閉應用;
  • GET /trace:列出應用最近請求相關的元數據,包括請求和響應頭。
    爲了啓用Actuator,我們只需將Actuator Starter依賴添加到項目中即可。

項目中加入以下依賴(有多種寫法,都會依賴引入下面的兩個jar包)便引入了spring-boot框架。

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>1.5.13.RELEASE</version>
            <scope>compile</scope>
            <!--代表不引用傳遞-->
            <optional>true</optional>
    </dependency>

會引入兩個依賴包(也會引入spring底層的東西):
org.springframework.boot:spring-boot
這個類庫提供了springboot的一些特性

  • 如SpringApplication類,提供了一個方便的靜態方法去創建一個標準的Spring項目,它唯一的任務是創建和更新Spring的ApplicationContext
  • 內嵌web容器的選擇
  • 一流的外部配置支持
  • 方便的ApplicationContext初始化配置,包括一個默認且懂事的log配置

org.springframework.boot:spring-boot-autoconfigure
是我們常用的一些功能的自動配置類,比如說mail發短信,mq消息隊列自動配置,Aop自動配置等,代替了我們諸多的xml文件,自動推斷生效。

org.springframework.boot:spring-boot-start-項目名
一般官方starter這裏面是不包含代碼的,只有一個pom文件,依賴傳遞導入以來的相關的功能依賴jar包,結合spring-boot-autoconfigure的代碼用於自動配置。

舉例來講項目中寫上

compile('org.springframework.boot:spring-boot-starter-aop')

會根據依賴傳遞引入

org.springframework.boot:spring-boot-starter
org.springframework:spring-aop
org.aspectj:aspectjweaver

當然用IDEA的話,列表中也會出現

org.springframework.boot:spring-boot-starter-aop

但是打開後發現下面僅僅是一個描述文件,什麼也沒有,官方的這個包的代碼也僅有一個Pom文件

自己寫的框架starter可以有多種寫法,但是原則不變。
需要有項目框架源碼+自動配置發現類+pom文件(打包成一個starter)+讓人使用
一般的非官方starter的artifactId是:

原框架artifactId-spring-boot-starter

依賴引入的時候使用方

compile('groupId:框架artifactId-spring-boot-starter:0.2.63')

所以說有四種寫法去定義starter,①②分別代表不同的項目
寫法一:如druid

①原項目源碼
②自動發現配置類+打包的pom文件

寫法二:網上搜索自定義starter都是這樣的實現

①項目源碼+自動發現配置類+打包的pom文件

寫法三:有點類似於Spring的寫法,但是不完全相同

①項目源碼+自動發現配置類
②僅有一個pom文件,用來描述依賴關係,進行打包,像Spring一樣

寫法四:Spring的官方實現方法,對比三來講拆分的更加徹底

①原項目源碼(org.springframework.data:spring-data-redis,io.lettuce:lettuce-core,以及Spring的底層jar等等)
②自動發現配置類(org.springframework.boot:spring-boot-starter底層又引入了org.springframework.boot:spring-boot-autoconfigure
③打包的pom文件(描述依賴關係,需要引入項目依賴源碼+自動配置發現類

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