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

标签 java dependency-injection serviceloader

Java 的 ServiceLoader 需要这些条目出现在 JAR 文件中。在 IDE 内部时,有没有办法在运行时以编程方式添加这些服务条目以进行单元测试?尤其是当尚未构建 JAR 时。

最佳答案

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

关于java - Java ServiceLoader 在开发期间如何工作? (构建 JAR 之前的单元测试?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3151933/

相关文章:

java - 如何删除 apache axis 2 消息响应的字符编码

spring-security - Spring Security 配置循环依赖错误

java - 类加载器和服务加载器。使用哪个类加载器?

java - ServiceLoader 不加载新服务

java - ServiceLoader找不到插件

javascript - 在 wicket 中刷新页面后重新聚焦输入字段

java - EGit 2.1.0 和 Eclipse 4.2.1 的 Ignored Resources 是否损坏?

java - 将递增的整数 Id 添加到 JavaRDD

java - 如何从 Spring boot 依赖注入(inject)中的对象列表中查找特定的类对象

dependency-injection - EJB3 与数据访问对象