- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
jjs.exe 运行的脚本是否应该能够像任何 Java 程序一样使用 ServiceLoader
定位服务?
我已将案例简化为以下脚本:
function dump (stream)
{
(new BufferedReader(new InputStreamReader(stream))).lines().forEach(function (x) { print(x); });
}
var BufferedReader = Java.type("java.io.BufferedReader");
var InputStreamReader = Java.type("java.io.InputStreamReader");
var ServiceLoader = Java.type("java.util.ServiceLoader");
var Sts = Java.type("prodist.sts.Sts");
print(Sts);
// A
var stsConfigStream = Sts.class.getResourceAsStream("/META-INF/services/prodist.sts.Sts");
dump(stsConfigStream);
// B
var StsImpl = Java.type("prodist.sts.internal.StsImpl");
print(new StsImpl());
// C
var stsLoader = ServiceLoader.load(Sts.class);
var stsIterator = stsLoader.iterator();
stsIterator.next();
// D
我调用jjs.exe
在命令行上设置类路径。我的脚本正确找到并打印了A点的接口(interface)名称。它找到了服务描述资源;当我转储资源的内容时,我在 B 点看到了预期的内容。我确保预期的实现类在 C 点可用。
在 D 点,程序抛出 NoSuchElementException
,我将其解释为 ServiceLoader 未找到该接口(interface)的任何服务描述资源。
这应该有效吗?我错过了什么吗?
最佳答案
您需要设置线程上下文类加载器。引用 jjs 类路径中的任何类,获取它的 Class 对象,然后获取它的类加载器。然后将该加载器设置为线程上下文类加载器。这应该在使用服务加载器 API 之前完成:
var StsClass = Java.type("prodist.sts.Sts").class;
java.lang.Thread.currentThread().contextClassLoader = StsClass.classLoader;
关于java - jjs.exe 和 ServiceLoader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40227657/
我的 ServiceLoader 不想加载我的新服务。我认为我已正确设置所有内容。 核心.主要 public class Main { public static void main(String
是否可以在注释处理器的 init(ProcessingEnvironment) 方法中使用 ServiceLoader? interface Service {} class Annotation
这是一个已知问题吗?我找不到任何搜索结果。 当迭代已经在进行时迭代 ServiceLoader 时,第一次迭代将中止。例如,假设至少有两个 Foo 的实现,以下代码将失败并出现 AssertionEr
我想了解Java ServiceLoader的概念、工作机制和具体用例,但找到官方documentation过于抽象和困惑。 首先,文档概述了服务和服务提供商。服务是一组封装在 jar 存档(API
我最近发现关于服务加载器是否会在启动后定位添加到模块路径的提供程序的相互矛盾的文档。 ServiceLoader::reload : public void reload() Clear this
在问这个之前我真的做了很多研究,好像我错过了什么。我尝试实现一个 ServiceLoader,因此制作了一个示例类: 代码很简单: testInterface.java package com.tes
使用 ServiceLoader 的最佳实践是什么?在具有多个类加载器的环境中?该文档建议在初始化时创建并保存单个服务实例: private static ServiceLoader codecSet
我遇到了 the documentation of ServiceLoader并且不清楚它适用于哪些用例。 什么时候使用ServiceLoader? 最佳答案 当您希望您的程序具有“插件”功能时,您可
JPMS ServiceLoader 无法正常工作。 我正在尝试提供一个桌面程序作为可执行jar,带有默认服务,可以由个人用户重载。用户提供他们自己的服务类,并在命令行上提供他们的名字作为参数。 服务
我有一个使用 JPMS 功能的多模块 Maven 项目。消费者模块未加载提供者模块中存在的实现。 这是 Maven 项目结构: ServiceLoaderExample ├── consumer ├─
我正在尝试弄清楚Java的ServiceLoader。我设置了一个非常基本的测试实现: public class BaseThingy { public BaseThingy(){ Itera
我遇到问题,但不知道如何解决 假设我有两个服务提供商接口(interface) (SPI) public interface View{ display(); } public interfa
我希望能够将枚举类型指示为接口(interface)实现,然后通过 ServiceLoader API 将所有枚举加载为接口(interface)的单独实例/实现。此用例的一个示例是允许 API 的下
我想知道是否可以将 ServiceLoader 与 EJB 以及来自 Java EE 6 的注入(inject)结合起来。 假设我有一个接口(interface) ServiceI,它可以由两个 EJ
我正在尝试将一个基本的基于 SPI 的处理程序注册表放在一起,我从 HandlerRegistry 中查找它。当我使用 ServiceLoader.load(Handler.class) 初始化提供程
我刚读到有关 Java 9 模块系统的信息,我想问一下 ServiceLoader .当应用程序已经启动时,有什么方法可以添加服务实现吗?删除一些服务实现怎么样? 用例:我将有一些计算某些东西的应用程
class ServiceLoader implements Iterable { // ... } interface Foo { // ... } class FooReposit
我试图找出是否有 ServiceLoader 类的 Spring 类似物,它是标准 SDK API 的一部分。如果有这样的类怎么用? 请指教! 最佳答案 假设 SpringFactoriesLoade
jjs.exe 运行的脚本是否应该能够像任何 Java 程序一样使用 ServiceLoader 定位服务? 我已将案例简化为以下脚本: function dump (stream) { (n
我的工作区中有四个 Eclipse 插件项目(创建一个新的 Java 项目,右键单击,配置,转换为插件项目)。第一个(my.runtime)包含一个接口(interface)(MyFactoryInt
我是一名优秀的程序员,十分优秀!