何时在 Java 9 中的模块中使用 ServiceLoader 类?
javaobject oriented programmingprogramming更新于 2025/10/7 16:12:17
Java 有一个来自 java.util 包的 ServiceLoader 类,它可以通过搜索类路径在运行时帮助 定位 服务提供商。对于在模块中定义的服务提供商,我们可以查看示例应用程序来声明带有服务的模块及其工作原理。
例如,我们有一个"test.app"模块,我们需要使用 Logger,可以借助 LoggerFinder service 从 System.getLogger() 工厂方法检索它。
module com.tutorialspoint.test.app {
requires java.logging;
exports com.tutorialspoint.platformlogging.app;
uses java.lang.System.LoggerFinder;
下面是 test.app.MainApp 类:
package com.tutorialspoint.platformlogging.app;
public class MainApp {
private static Logger LOGGER = System.getLogger();
public static void main(String args[]) {
LOGGER.log();
}
}
这是 "test.logging" 模块内的 LoggerFinder 实现:
package com.tutorialspoint.platformlogging.logger;
public class MyLoggerFinder extends LoggerFinder {
@Override
public Logger getLogger(String name, Module module) {
// 根据名称/模块返回 Logger
}
}
在 "test.logging"模块声明,我们可以提供一个带有"provides – with"子句的 LoggerFinder 服务的实现。
module com.tutorialspoint.test.logging {
provides java.lang.System.LoggerFinder
with com.tutorialspoint.platformlogging.logger.MyLoggerFinder;
相关文章
有用资源
java 参考教程 - 该教程包含有关 java 的更多信息:https://www.cainiaomax.com/java/

