[英]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.