看了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