Java ServiceLoader在开发期间如何工作? (构建JAR之前的单元测试?)

时间:2010-06-30 17:49:03

标签: java dependency-injection serviceloader

Java的ServiceLoader需要这些条目存在于JAR文件中。有没有办法在运行时以编程方式添加这些服务条目以进行单元测试?特别是当JAR尚未建成时。

1 个答案:

答案 0 :(得分:7)

不要太专注于JAR文件。它们是封装服务的首选方式,但它们不是必需的。关键是ClassLoader.getResources(String) - String arg实际上变为("META-INF/services/" + serviceClass.getName())。要记住的另一点信息是ServiceLoader.load(Class)使用context class loader(当然,您也可以使用ServiceLoader.load(Class, ClassLoader))。所以...你真正需要做的是操纵类路径或配置上下文类加载器,以使ServiceLoader满意。