簡體   English   中英

擴展 Java 類並強制現有庫使用擴展類

[英]Extend a Java Class and force existing libraries to use the extended class

情況如下:我正在使用一些使用特定類加載和訪問配置參數的庫。 配置加載器類在其中一個庫中實現。 我所做的是:擴展配置加載器類,使其符合我的要求並能夠加載不同的配置源:

public class BetterConfigLoader extends OldConfigLoader {
    ...
}

現在我想讓現有的庫使用我兼容的 BetterConfigLoader,而不需要對庫進行更改,也不需要重新編譯它們。 有沒有最佳實踐方法來實現這一目標?

這取決於您的庫如何引用配置類。 他們有硬編碼的new OldConfigLoader().configure()嗎?

或者他們是否使用某種SPI技術,例如檢查名為META-INF/services/ConfigLoader的資源是否存在,並且僅當不存在時才回退到默認配置類?

除了檢查這樣的資源,他們還可以檢查系統屬性。 在這些情況下,您可以通過創建匹配的 SPI 資源或設置系統屬性來設置您的特殊類。

如果是硬編碼參考,那你就不走運了。

您可以替換它,而不是擴展 OldConfigLoader。 從 OldConfigLoader 的源代碼開始,更改它以滿足您的需要,然后確保您的類路徑中的版本高於原始版本。 確保您的實現與原始實現具有相同的類名並且在同一個包中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM