【未完】關於ConditionalOnClass註解

1. pom文件 標籤

依賴配置文件我們經常接觸到,但對<optional>標籤理解可能一知半解(以我的角度,在這之前沒有關注過),或者是你沒看下面內容,都不知道optional應該放在什麼地方。

<optional>標籤在pom文件中長這樣:

<dependency>
  <groupId>org.tao</groupId>
  <artifactId>sms-utool</artifactId>
  <version>1.0-SNAPSHOT</version>
  <optional>true</optional> <!-- 在這裏 -->
</dependency>

什麼作用? optional的作用是:當其他模塊依賴當前模塊時,不會依賴 true 的依賴文件,可結合下圖理解:


2. 程序爲什麼這麼寫?

空口無憑,Hutool 工具包實現了很多好用的工具,他的擴展工具包依賴很多了第三方工具包,例如:

怎麼驗證?拿emoji舉例,沒添加emoji-java依賴,emojiUtil會爆紅,由於Java是動態加載,所以未使用時不會報錯。

Hutool開發者考慮到擴展中的內容我們一般不會用到,假如Hutool依賴文件設置爲默認:false,我們引入hutool工具,也會相應引入額外的其他依賴(其實並不會使用),也會導致依賴管理混亂。

如果true,就相當於你想用壓縮工具,你自己只引入common-compress依賴就可以。hutool相當於一個框架,細節需要你來填充。


ConditioalOnClass

用於根據類路徑中是否包含指定的類來決定是否加載一個 Bean 或配置類。

@Configuration
public class SmsConfig {
    @ConditionalOnClass(TxSmsService.class)
    static class TxConfig{
        @Bean
        TxSmsService txSmsService() {
            System.out.println("tx smsService init");
            return () -> System.out.println("tx發送短信");
        }
    }
}

如果能找到TxSmsService類,那麼就注入TxSmsService。

----- 未完待續,按計劃2024-05-19之前寫完

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