美文网首页
设计模式-代理模式之管中窥豹

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

作者: 喝不醉的Solace | 来源:发表于2020-11-19 12:22 被阅读0次

代理模式

从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实现类,利用反射机制

  • 构造实例,set注入
  • 构造函数注入
    然后,构造java代码,大致逻辑为,根据URL参数,获取具体要执行的实现类名,然后也是通过调用ExtensionLoader.getExtensionLoader(Protocol.class).getExtension("name")获取实现类;
    代码构造完成后,通过javassist编译java代码,动态加载class类

动态代理

  • 通过上面的例子,我们可以大致清楚下面几件事
    • 在调用方,我们无需关注具体的类实现
    • 代理类动态给我们提供不同的实现,我们只需按需传参即可

思考

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

相关文章

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

    代理模式 从Dubbo-SPI说开去 在dubbo暴露服务时,ServiceConfig中有这样一行代码 代码大义...

  • 设计模式之代理模式

    设计模式之代理模式 10分钟看懂动态代理设计模式(升级篇)-对这篇动态代理模式的思路整理 仿JDK实现动态代理逻辑...

  • 代理模式

    设计模式之代理模式 什么是代理模式? 指的事代理对象为其他对象提供代理以控制对被...

  • Java设计模式之代理模式

    Java设计模式之代理模式 代理模式 静态代理 动态代理 为什么需要代理 通过代理,我们能够不用知道委托人是谁,而...

  • Java代理模式之JDK动态代理

    了解什么是动态代理模式,可参考Java设计模式之代理模式 简介 JDK动态代理是java.lang.reflect...

  • 设计模式之代理模式2

    设计模式之代理模式运用 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对...

  • 设计模式之代理模式

    设计模式之代理模式 简介 代理模式是结构型设计模式。 当无法或不想直接访问某个对象或访问某个对象存在困难时可以通过...

  • 设计模式之代理模式

    title: 设计模式之代理模式date: 2018-08-15 20:25:42tags: 设计模式 笔记 Ja...

  • java设计模式之代理模式(静态代理)

      今天给大家分享的是java设计模式之代理模式中的静态代理模式,动态代理模式将在后面文章中给出。如有不足,敬请指...

  • Android 代理模式

    Android 设计模式系列文章 Android 23种设计模式 前言 代理模式可能是我们平时开发中最常见的模式之...

网友评论

      本文标题:设计模式-代理模式之管中窥豹

      本文链接:https://www.haomeiwen.com/subject/yyskiktx.html