在 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;
}
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP