Springboot自动获取接口实现

ServiceLoader加载接口实现步骤

1.编写接口

复制代码
public interface CommunicationAdapterFactory {
    void setKernel(LocalKernel kernel);
    boolean providesAdapterFor(Vehicle vehicle);
    BasicCommunicationAdapter getAdapterFor(Vehicle vehicle);
}

2.编写实现

复制代码
// 实现类 1
public final class LoopbackCommunicationAdapterFactory implements CommunicationAdapterFactory {
    @Override
    public void setKernel(LocalKernel kernel) {}

    @Override
    public boolean providesAdapterFor(Vehicle vehicle) {
        return true;
    }

    @Override
    public BasicCommunicationAdapter getAdapterFor(Vehicle vehicle) {
        return null;
    }
}

// 实现类 2
public final class MqttCommunicationAdapterFactory implements CommunicationAdapterFactory {

    @Override
    public void setKernel(LocalKernel kernel) {}
    
    @Override
    public boolean providesAdapterFor(Vehicle vehicle) {
        return true;
    }
    
    @Override
    public BasicCommunicationAdapter getAdapterFor(Vehicle vehicle) {
        return null;
    }
}

3.要在resources文件夹下创建文件夹 "META-INF/services"

在创建的文件夹下,将接口文件的引用作为文件名创建文件

4.将实现的接口文件引用作为文件内容放到文件中

com.mj.tcs.adapter.mqtt.MqttCommunicationAdapterFactory

5.实现加载

复制代码
    public static void main(String[] args) {
        ServiceLoader<CommunicationAdapterFactory> factoryLoader = ServiceLoader.load(CommunicationAdapterFactory.class);
        for (CommunicationAdapterFactory factory : factoryLoader) {
            System.out.println(factory);
        }
    }
相关推荐
曹牧10 分钟前
文档格式:OFD
java
豆角焖肉35 分钟前
Maven进阶与搭建私服
java·maven
大不点wow1 小时前
Java序列化与反序列化:让对象走出JVM
java·开发语言·jvm
止语Lab1 小时前
好的 DX 不等于少写代码——三种语言的摩擦力设计课
后端
吃饱了得干活1 小时前
别再手动解析 LLM 输出了!LangChain 四种结构化输出方案对比
后端·python·langchain
噢,我明白了1 小时前
Java中日期和字符串的处理
java·开发语言·日期
程序员天天困1 小时前
Arthas trace 命令怎么用?一行定位最慢那行代码
jvm·后端
Huiturn1 小时前
GPT 5.6 连续编码 10 小时,纯 Python 啃下 Word 二进制格式——doc2docx 实现拆解
后端
dkbnull1 小时前
Spring Boot请求处理组件对比详解
java·spring boot
jun_bai1 小时前
Orthanc服务器使用java上传dicom影像文件
java·运维·服务器