在 Java 9 中的模組中何時使用 ServiceLoader 類?


Java 有來自 java.util 包的 ServiceLoader 類,它可以透過在類路徑中搜索,來幫助在執行時 定位 服務提供商。對於模組中定義的服務提供商,我們可以檢視示例應用程式,瞭解如何使用服務宣告模組,以及它是如何工作的。

例如,我們有一個 "test.app" 模組,我們需要使用能夠在 System.getLogger() 的幫助下從工廠方法中獲取的記錄器 Logger LoggerFinder 服務。

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) {
      // return a Logger depending on name/module
   }
}

在 "test.logging" 模組宣告中,我們可以使用 "provides – with" 子句提供 LoggerFinder 服務的實現。 

module com.tutorialspoint.test.logging {
   provides java.lang.System.LoggerFinder
   with com.tutorialspoint.platformlogging.logger.MyLoggerFinder;
}

更新於:2020 年 4 月 9 日

218 次瀏覽

開啟您的 職業生涯

完成課程獲得認證

開始學習
廣告