b spring boot 入門介紹 28----創建一個自己的starter

—> go to 總目錄


starter的demo

一、什麼時候需要starter

打當你開發一個需要被人使用的lib,或者使用商業的lib時,你可以做一個自動裝配的starter,可以被spring boot 自動設置

二、理解Auto-configured bean

首先auto-configuration是一個 @Configuration的實現。同時額外的加上了
@Conditional註解。
通常auto-configuration類使用@ConditionalOnClass@ConditionalOnMissingBean註解以便於判斷是否符合自動裝配的條件。----其依賴的類或者配置是否存在

三、spring boot如何找到starter

在你starter的jar包的目錄下META-INF/spring.factories,是配置有哪些自動配置類
在這裏插入圖片描述

自動配置的類,只能以這種方式來定位。來確保他們在一個特殊的路徑下,不被component scan自動掃描到。更重要的是auto-configuration類不應該打開組件掃面(componment scan)而是應該使用@Import

你可以使用@AutoConfigureAfter@AutoConfigureBefore 來配置順序,你也可以定義@AutoConfigureOrder來定義順序。

四、條件註解

重要的特性,提供高級的規則來判斷一個bean是否應該被裝配。
我們有多種@Conditional註解,
@ConditionalOnMissingBean最常用。
在這裏插入圖片描述
proxyBeanMethods =flase是5.2的新特性,讓配置類不會被代理提高性能
具體看原文的使用方式

五、自動配置的測試

stater具體加載那些類是不確定的,是根據設置的條件生成的。所以有必要去設置測試,來檢測是否成功配置。每種測試例子都需要自己的applicationContext,
ApplicationContextRunner可以辦到。
ApplicationContextRunner總是被當做filed被引入,如下可以生成一個applicationContext包含uservices自動配置
在這裏插入圖片描述
具體配置見原文

模擬 a Web Context

需要servlet操作的,可以有WebApplicationContextRunnerReactiveWebApplicationContextRunner

Overriding the Classpath

有時候你要測試當類不存在時,會發生什麼,spring boot 提供ships方式給包改名字,達到包miss的效果。
在這裏插入圖片描述

六、創建你自己的starter

spring boot stater包含下面兩個組件

  • autoconfigure module 包含auto-configuration 代碼
  • starter模塊依賴autoconfigure模塊,也暴露給外界(額外的依賴)像一個堅果殼,提供啓動所需的所有依賴。

naming

命名,不要以spring-boot開頭。
比如你的starter叫acme,可以這麼命名模塊acme-spring-boot-autoconfigureacme-spring-boot-starter

Configuration keys

配置鍵值對
在這裏插入圖片描述
配置建議

  • 變量的描述不要以the或者a開頭
  • boolean類型,請以WhetherEnable開頭
  • 數組類型,請以,分割的元素
  • 使用java.time.Duration要比long來描述時間好的多,當沒有單位時默認是秒

autoconfigure Module

這個模塊包含了,啓動時必須要要實例化的依賴。可能會包含上述Configuration keys的定義,比如@ConfigurationProperties;和初始化用的callback函數。

你應該去標識你的依賴爲可選的,暴露給springboot來選擇是否是關閉這些依賴

Spring Boot使用註解驅動的 processor,來收集自動配置條件(可以配置在文件裏META-INF/spring-autoconfigure-metadata.properties),如果有這個文件,就會被用來過濾不需要配置的類,來節約啓動時間。
推薦在autoconfigure加入如下的配置。

Starter Module

這個模塊真的就知識一個空模塊而已,只是爲了提供一個必要的依賴而已。你可以把它想成一個view而已。
不要假定的stater需要的一些條件被加載了。典型的你的stater可能需要其他starter,也要留意他們。同時提供一個默認的依賴是困難的,尤其是提供了大量可選的條件,你應該避免把必須要用的依賴設爲可選,換句話說你把常用的依賴,不要設爲可選。

有兩種使用方式,你的starter必須直接引用spring-boot-starter;你的stater依賴其他strter,簡介的依賴了spring-boot-starter

具體還得看demo

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