十二、Dubbo框架源码分析:代理SPI
1.代理模式的作用:隐藏远端调用的实现细节。
1. @SPI 指定默认使用 javassist 字节码技术来生成代理对象
2. 接口定义了生成代理对象的方法 getProxy, 入参是 invoker 对象
3. 接口定义了获取 invoker 对象, invoker 对象是个可执行对象,这里 inovker对象的 invoke 方法其实执行的是根据 url 获取的方法对第一个入参的实体对象的调用,即:如果 url 的得知调用方法 sayHello, 入参 proxy 为空 Test对象实现 test,那 invoker.invoke()就是 test.sayHello()。
2.JDK代理模式:通过Proxy实现
3.Javassist代理模式:
看似跟 jdk 生成代理一样, 其实这里的 Proxy 类不是 jdk 中自带那个生成代理对象的类是com.alibaba.dubbo.common.bytecode.Proxy。这个 dubbo 自己写的 Proxy 类,利用要代理的接口利用 javassist 工具生成代理代码。