情况如下:我使用一些使用特定类加载和访问配置参数的库。 config loader类在其中一个库中实现。 我所做的是:扩展配置加载器类,使其符合我的要求,并能够加载不同的配置源:
public class BetterConfigLoader extends OldConfigLoader {
...
}
现在我想让现有的库使用兼容的BetterConfigLoader,而不对库进行更改或不需要重新编译它们。 有没有最佳实践方法来实现这一目标?
答案 0 :(得分:1)
这取决于库如何引用配置类。他们有硬编码new OldConfigLoader().configure()
吗?
或者他们是否使用某种SPI技术,例如检查是否存在名为META-INF/services/ConfigLoader
的资源,只有在不存在的情况下,才会回退到默认配置类?
他们可以检查系统属性,而不是检查这样的资源。 在这些情况下,您可以通过创建匹配的SPI资源或设置系统属性来设置特殊类。
如果是硬编码的参考,那你就不走运了。
答案 1 :(得分:0)
您可以替换它,而不是扩展OldConfigLoader。从OldConfigLoader的源代码开始,根据您的需要进行更改,然后确保您的版本在类路径中高于原始版本。确保您的实现具有相同的类名,并且与原始文件包在同一个包中。