gpt4 book ai didi

java - ServiceLoader.load 如何与 JPMS 中的类加载器一起工作?

转载 作者:行者123 更新时间:2023-12-04 04:13:48 24 4
gpt4 key购买 nike

我有两个 JPMS 层:

  • 带有 module A 的引导层由 ClassLoaders$AppClassLoader@4fca772d 加载
  • 带有 module B 的子层提供 cervices 并由 Loader@6b58b9e9 加载
  • Loader@6b58b9e9 的父类加载器是 ClassLoaders$AppClassLoader@4fca772d .

    module A我有以下代码:
    ServiceLoader<ModuleAInterface> sl = ServiceLoader.load(ModuleAInterface.class);

    但是, Module B 的服务仅当上下文类加载器为 Loader@6b58b9e9 时才被发现当上下文类加载器为 ClassLoaders$AppClassLoader@4fca772d 时未找到.

    问题 - 是否可以获得 module B 的服务?在 module A不知道 module B 的类加载器在这样的配置中。

    最佳答案

    查看 java.util.ServiceLoader 的代码在 jdk 14(见截图)中,当有多个 ModuleLayer 时,它看起来遵循与类加载相同的逻辑,如 this stackoverflow answer 中所述
    enter image description here
    这意味着 ServiceLoader将首先查看自己的服务ModuleLayer然后在其父 ModuleLayer并以递归方式从 child 继续到 parent

    is it possible to get services of module B in module A without knowing class loader of module B in such configuration.



    但是模块 B 可以看到模块 A 中的服务

    关于java - ServiceLoader.load 如何与 JPMS 中的类加载器一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61139200/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com