设计模式-代理模式之管中窥豹

2020-11-19  本文已影响0人  喝不醉的Solace

代理模式

从Dubbo-SPI说开去

在dubbo暴露服务时,ServiceConfig中有这样一行代码

//
private static final Protocol protocol = ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension();

代码大义:即通过SPI机制动态加载Protocol实现类,然后获取自适应实例;

    private Class<?> createAdaptiveExtensionClass() {
        String code = createAdaptiveExtensionClassCode();
        ClassLoader classLoader = findClassLoader();
        com.alibaba.dubbo.common.compiler.Compiler compiler = ExtensionLoader.getExtensionLoader(com.alibaba.dubbo.common.compiler.Compiler.class).getAdaptiveExtension();
        return compiler.compile(code, classLoader);
    }

在构造动态适配类之前,会先扫描META-INF/services/,META-INF/dubbo目录下的service实现类,利用反射机制

动态代理

思考

在扩展性层面,代理模式带给我们更多可能,我们新增实现,在调用方无感知的情况下,通过动态调整调用参数,即可完成多元化的需求.同时我们也需要去思考,如何去根据不同场景,抽象出一个好的代理接口.

上一篇 下一篇

猜你喜欢

热点阅读