Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Khi nào nên dùng ServiceLoader trong module Java 9

Java có lớp ServiceLoader (package java.util) giúp tìm provider dịch vụ tại runtime bằng cách quét classpath. Với provider được định nghĩa trong module, cần khai báo module sử dụng dịch vụ và module cung cấp triển khai.

Ví dụ: module test.app cần dùng Logger từ System.getLogger() với dịch vụ LoggerFinder.

module com.tutorialspoint.test.app {
    requires java.logging;
    exports com.tutorialspoint.platformlogging.app;
    uses java.lang.System.LoggerFinder;
}

Lớp MainApp trong module app:

package com.tutorialspoint.platformlogging.app;
public class MainApp {
    private static Logger LOGGER = System.getLogger();
    public static void main(String args[]) {
        LOGGER.log();
    }
}

Triển khai LoggerFinder trong module test.logging:

package com.tutorialspoint.platformlogging.logger;
public class MyLoggerFinder extends LoggerFinder {
    @Override
    public Logger getLogger(String name, Module module) {
        // trả về Logger tùy theo name/module
    }
}

Khai báo module test.logging cung cấp dịch vụ:

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