首页 > Java > java教程 > 正文

Java SPI机制:真的会打破类加载器可见性原则吗?

聖光之護
发布: 2024-11-29 19:15:17
原创
461人浏览过

java spi机制:真的会打破类加载器可见性原则吗?

java中spi机制是否打破类加载器可见性原则

java中的类加载器遵循可见性原则,即类加载器只能加载其父加载器或自身加载的类。然而,有文章提出,java中的服务提供者接口(spi)机制可能会破坏此原则。

使用spi机制的代码片段

public static <S> ServiceLoader<S> load(Class<S> service) {
    ClassLoader cl = Thread.currentThread().getContextClassLoader();
    return ServiceLoader.load(service, cl);
}
登录后复制

违反可见性原则的说法

立即学习Java免费学习笔记(深入)”;

该代码使用sun.misc.launcher.appclassloader加载实现了servletcontainerinitializer接口的类。launcher.appclassloader是应用程序类加载器,它不能加载由引导类加载器加载的类。因此,有人认为这违反了可见性原则。

实际情况

事实上,java.util.serviceloader的load方法最终仍会使用双亲委派机制。serviceloader.lazyiterator#nextservice方法中调用class.forname方法加载类,而class.forname会沿着双亲委派链向上委派,直到找到该类为止。

因此,即使使用spi机制,load方法仍然可以通过双亲委派机制加载由其他类加载器加载的类。这不会破坏可见性原则。

打破双亲委派机制的经典范例

虽然spi机制本身不会打破双亲委派机制,但它确实是一个违反此机制的经典范例。这是因为spi允许第三方类加载器加载实现接口的类,而这些类可能无法由引导类加载器或应用程序类加载器直接访问。

以上就是Java SPI机制:真的会打破类加载器可见性原则吗?的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
相关标签:
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号