自己实现Dubbo的ExtensionLoader

看了dubbo的ExtensionLoader觉得用这样的方式加载各种组件和替换组件十分的方便,便自己实现了个。

使用方法:

    public static void main(String[] args) {
        // 调用 key 为 post 的http组件
        ExtensionLoader.getExtensionLoader(Http.class).getAdaptiveExtension("post").http();
        // 这个 直接使用注解配置的 key
        ExtensionLoader.getExtensionLoader(Http.class).getAdaptiveExtension().http();
    }

//输出结果
>>这是PostHttp 组件的 调用
>>这是GetHttp 组件的 调用

配置文件 在src/META-INF/services/com.hadluo.dubbo.test.Http:
com.hadluo.dubbo.test.Http 为客户端接口的全路径

post=com.hadluo.dubbo.test.PostHttp
get=com.hadluo.dubbo.test.GetHttp

Http接口

package com.hadluo.dubbo.test;

import com.hadluo.dubbo.extension.Adaptive;
import com.hadluo.dubbo.extension.SPI;

@SPI
public interface Http {
    @Adaptive("get")
    public void http();
}

两个实现类

public class GetHttp implements Http{

    @Override
    public void http() {
        System.err.println("这是GetHttp 组件的 调用");
    }
}

public class PostHttp implements Http {
    @Override
    public void http() {
         System.err.println("这是PostHttp 组件的 调用");
    }
}

源码结构如下
这里写图片描述

要源码可以加我qq 657455400免费给你, 放在csdn上面要积分下载。也给个下载链接吧:
https://download.csdn.net/download/luozheng4698729/10371705

猜你喜欢

转载自blog.csdn.net/LuoZheng4698729/article/details/80070630