在 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; }
廣告