情况如下:我正在使用一些使用特定类来加载和访问配置参数的库。配置加载器类在其中一个库中实现。 我所做的是:扩展配置加载器类,使其符合我的要求并能够加载不同的配置源:
public class BetterConfigLoader extends OldConfigLoader {
...
}
现在我想让现有的库使用我兼容的 BetterConfigLoader,而无需对库应用更改或不需要重新编译它们。 是否有最佳实践方法来实现这一目标?
最佳答案
这取决于您的库如何引用配置类。他们有硬编码的 new OldConfigLoader().configure()
吗?
或者他们使用某种 SPI技术,例如检查名为 META-INF/services/ConfigLoader
的资源是否存在,如果不存在,则回退到默认配置类?
除了检查这样的资源,他们还可以检查系统属性。 在这些情况下,您可以通过创建匹配的 SPI 资源或通过设置系统属性来设置您的特殊类。
如果是硬编码引用,那你就不走运了。
关于java - 扩展 Java 类并强制现有库使用扩展类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41715187/