Java的ServiceLoader需要这些条目存在于JAR文件中。有没有办法在运行时以编程方式添加这些服务条目以进行单元测试?特别是当JAR尚未建成时。
答案 0 :(得分:7)
不要太专注于JAR文件。它们是封装服务的首选方式,但它们不是必需的。关键是ClassLoader.getResources(String)
- String
arg实际上变为("META-INF/services/" + serviceClass.getName())
。要记住的另一点信息是ServiceLoader.load(Class)
使用context class loader(当然,您也可以使用ServiceLoader.load(Class, ClassLoader)
)。所以...你真正需要做的是操纵类路径或配置上下文类加载器,以使ServiceLoader
满意。