何时在 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;


相关文章


有用资源