当前位置: 首页 > 面试题库 >

ServiceLoader查找接口的实现

郑高驰
2023-03-14
问题内容

我尝试使用Java
ServiceLoader查找实现特定接口的所有类,如下所示:

loader = ServiceLoader.load(Operation.class);
try {
    for (Operation o : loader) {
        operations.add(o);
    }
} catch (ServiceConfigurationError e) {
    LOGGER.log(Level.SEVERE, "Uncaught exception", e);
}

不幸的是,当我在调试模式下运行Eclipse时,ServiceLoader找不到任何类。我觉得我错过了一个琐碎的事情…


问题答案:

ServiceLoader 无法做到。

为了将类公开为可以被发现的服务,ServiceLoader您需要将其名称放入提供程序配置文件中,如使用Java平台创建可扩展应用程序中所述

没有内置的方法可以找到实现特定接口的所有类。可以执行类似操作的框架使用它们自己的类路径扫描解决方案(即使使用自定义类路径扫描也不容易,因为.class文件仅存储有关直接实现的接口的信息,而不是传递性地)。



 类似资料:
  • 问题内容: 前一段时间,我遇到了一段代码,该代码使用了一些标准Java功能来定位实现给定接口的类。我知道这些函数隐藏在某些非逻辑的位置,但是由于包名称暗含,它们可以用于其他类。那时我不需要它,所以我忘记了它,但是现在我需要了,而且似乎无法再次找到这些函数。在哪里可以找到这些功能? 编辑:我不是在寻找任何IDE函数或任何东西,而是可以在Java应用程序中执行的东西。 问题答案: 不久前,我整理了一个

  • 问题内容: 我正在开发一个应用程序(Quartz调度程序),其中有一个作业类负责实际执行工作,我们需要在Quartz调度程序中创建触发器时告知/传递作业类的名称。 我想为所有想使用该API的人提供一个扩展点(除了我将作为API的一部分提供的一些通用作业之外)。这个想法是创建一个(标记)接口,如果有人想将其类声明为调度程序作业类,那么他们要做的就是(声明)实现该接口。 我不确定如何找到合约之后的类(

  • 给定以下代码: 我得到错误“找不到名称IMyInterfaceA”。处理这种情况的正确方法是什么?

  • 本文向大家介绍详谈ServiceLoader实现原理,包括了详谈ServiceLoader实现原理的使用技巧和注意事项,需要的朋友参考一下 在java中根据一个子类获取其父类或接口信息非常方便,但是根据一个接口获取该接口的所有实现类却没那么容易。 有一种比较笨的办法就是扫描classpath所有的class与jar包中的class,然后用ClassLoader加载进来,然后再判断是否是给定接口的子

  • 我需要在我的Spring引导应用程序中找到只实现一个特定接口的类。我面临的问题是,ClassPathBean定义扫描仪正在返回实现“扩展”子接口的类。 示例: 以下是我目前使用的代码: 现在的结果是数组字符串“beans”包含所有其他类,如F、G、H、I、J等。 如何以只返回只实现指定接口的选定类的方式构造我的TypeFitler,即过滤掉应用扩展接口的所有实现。例如B类,但E类除外。 以下是将C

  • 我正在尝试修改此链接中给出的Openmrs rest调用:https://github.com/openmrs/openmrs-module-webservices.rest/blob/master/omod-common/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/controller/SessionController.