Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

เมื่อไหร่ควรใช้คลาส ServiceLoader ในโมดูลของ Java 9


Java มีคลาส ServiceLoader จากแพ็กเกจ java.util ที่ช่วย ค้นหา service providers ในขณะรันไทม์โดยการค้นหาใน classpath สำหรับ service providers ที่นิยามในโมดูล เราสามารถดูตัวอย่างแอปพลิเคชันเพื่อประกาศโมดูลกับ service และดูวิธีการทำงาน

ตัวอย่างเช่น เรามีโมดูล "test.app" ที่ต้องการใช้ Logger ซึ่งสามารถดึงได้จาก factory method System.getLogger() ด้วยความช่วยเหลือของ service 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();
    }
}

นี่คือการนำ LoggerFinder ไปปฏิบัติภายในโมดูล "test.logging":

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" เราสามารถให้การนำ service LoggerFinder ไปปฏิบัติด้วย clause "provides – with":

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