JAVA SpringBoot 項目打成jar包供第三方引用自動配置(Spring發現)解決方案


 

本項目測試環境

JDK: 1.8

SpringBoot: 2.1

  • 需求描述

  當我們想要利用SpringBoot封裝一套組件並發布給第三方使用時,我們就不得不考慮我們的組件能否被使用者正確引入使用,本文章講解的是項目打包成 jar 包后 Spring 配置類未掃描、未注冊Bean的解決方案

  • 解決方案

  此處提供三種解決方案,友好型依次提升。

  1. 使用者手動配置 basePackages
  2. 使用者通過注解方式啟用配置
  3. SpringBoot 主動發現

 

  • 正文開始

  第一種:使用者手動配置 basePackages (對組件開發者最為簡單,對使用者最為繁瑣)

使用此方式,對組件開發者最為簡單,不需要對項目進行任何其余配置,我們只需要在測試環境使用功能后直接打包發布。

但是使用者使用時需要手動配置 basePackages,假設我們的組件的包基礎為:“top.huic.logrecord.ui”,則在使用時應進行如下配置:

@Configuration
@ComponentScan(basePackages = {"top.huic.logrecord.plus.ui.**"})
public class TestConfig{

}

配置方式: 在SpringBoot啟動類或能被Spring發現的 Configuration 類上增加 @ComponentScan(basePackages={"top.huic.logrecord.plus.ui.**"})

通過此方式配置后,Spring會在啟動時掃描 top.huic.logrecord.plus.ui 這個包,我們的組件自然而然也會被注冊為Spring Bean

  第二種:使用者通過注解方式引入(在特定的需求環境使用)

第一種方式需要使用者手動進行 basePackages 配置,當使用者忘記配置時,我們的組件則不會生效,第二種雷同,只不過配置方式有變

首先來看看我們項目(組件)的文件結構

LogRecordClientConfig 則為我們主要配置類,相當於我們組件的入口,代碼如下:

1 @Configuration
2 @ComponentScan("top.huic.logrecord.client.**")
3 public class LogRecordClientConfig {
4 }

其中,第一行是聲明為一個配置類

第二行為設置自動掃描包,讓Spring能夠發現我們封裝的組件的其他 Spring Bean

 

到這兒還遠遠沒完,因為我們的目的是使用者通過注解才能發現該配置類,所以我們還需要建立一個注解類,此處取名為 EnableLogRecordClient我們來看看EnableLogRecordClient中的代碼:

1 @Retention(RetentionPolicy.RUNTIME)
2 @Target({ElementType.TYPE})
3 @Documented
4 @Import({LogRecordClientConfig.class})
5 public @interface EnableLogRecordClient {
6 }

關鍵代碼為第 4,此行是代碼導入 LogRecordClientConfig 類,也就是我們前面的配置類。

自此,我們的任務就完成了,剩下的步驟就交於使用者了。

當使用者使用我們組件,需要在能被Spring發現到的 Configuration 上使用我們的注解,代碼如下:

 

@EnableLogRecordClient
@Configuration
public class TestConfig {
}

 

這樣,當用戶啟動程序時,Spring就會將 LogRecordClientConfig 注冊到Bean,然后讀取LogRecordClientConfig中的 @ComponentScan 注解,就實現了我們組件全包被Spring覆蓋

 

  第三種:這也是本文介紹的最后一種(Spring Boot Starter),對組件開發者和使用者都比較友好,故推薦使用,如遇復雜業務,可在第二種和第三種中取舍

使用此方法時,我們任然來看看目錄結構

LogRecordPlusUiStart 等同於方法2的 LogRecordClientConfig,請參照配置

此方法最關鍵的為 resources/META-INF/spring.factories 文件,當項目啟動時,Spring會掃描所有jar包下面的 spring.factories 文件,進行相應的自動配置處理,此處我們不進行深入講解,只看看基本配置

1 org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
2 top.huic.logrecord.plus.ui.LogRecordPlusUiStart

其中  org.springframework.boot.autoconfigure.EnableAutoConfiguration 代表自動配置的 key,即代表需要自動配置哪些類,\ 可以理解為一個換行符,則該行下面的每行當做一個參數

第二行則為我們剛才看見的配置類的全路徑,如果需要 Spring 自動配置多個類,我們依行寫入它的全路徑即可

當做完這一步,我們的組件就可以打包了,然后使用者只需要引入我們的jar包,Spring就會在啟動時對我們 spring.factories 中的所有配置類進行自動配置

自此,三種方法均介紹完畢。

 

如需深入了解此方法,請自行搜索 Spring Boot Starter


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM