今日学习(自律天数:3):dubbo spi机制源码阅读 gateway网关复习

120 阅读1分钟

前言

本系列文章只是关注自己每天学习的复习

1. Dubbo SPI机制

1. 普通实现

首先什么是SPI机制,它允许用户在运行时动态地替换实现,我的理解为用接口去找实现。dubbo的SPI机制是在META-INF目录下创建dubbo文件夹在里面创建以接口为名字的文件名。

1687618197031.jpg

文件内容为

hello=com.moxiu.impl.HelloImpl

含义以hello为名字的HelloService实现类,Dubbo怎么去拿呢

public class ApplicationTest {


    public static void main(String[] args) {
        ExtensionDirector extensionDirector = ApplicationModel.defaultModel().getExtensionDirector();
        ExtensionLoader<HelloService> extensionLoader = extensionDirector.getExtensionLoader(HelloService.class);
        HelloService hello = extensionLoader.getExtension("hello");
        hello.sayHello();
    }
}

以上为Dubbo spi服务发现代码如果学过JDK自带的SPI机制的话那么你就会看出有区别了,Dubbo的spi机制居然能控制要那个接口的实现类,可JDK自带的只能全部加载后通过迭代器去找。如果

2. 包装一下

以下我加了一个类

public class HelloImplWrapper implements HelloService {

    private HelloService hello;

    public HelloImplWrapper(HelloService hello) {
        this.hello = hello;
    }

    @Override
    public void sayHello() {
        System.out.println("hello之前");
        hello.sayHello();
        System.out.println("hello之后");
    }
}

在META-INF文件中加了一行

hello=com.moxiu.impl.HelloImpl
helloWrapper=com.moxiu.impl.HelloImplWrapper

然后我来运行一下 image.png 这是Dubbo提供的扩展只要我们用一个类实现一下同一个接口并且以构造方法注入这个接口那么他就会帮我们把这个接口实现类注入进来。类似于spring aop的功能。那如果我有多个包装呢。这里就不给代码了,他会有一个套娃机制它会根据从上到下一层一层包装。还有通过set注入也行。 今天就到这吧,网关的之后补QAQ