Javassist 生成动态代理可以使用两种方式,一种使用代理工厂创建,和普通的JDK动态代理和 CGLIB类似,另一种则可以使用 动态代码创建。
Dubbo无论是生产端的暴露服务创建的invoker代理还是消费端创建的代理调用,都会需要经过代理。而Dubbo中默认采用javassit代理,动态的在内存当中生成所代理类的字节码,来完成代理的功能。
可以看到,javassit的代理工厂类只实现了两个方法,恰恰是上文所说的消费端和生产端两个流程中的代理实现。以getProxy()为例子,也就是生成消费端的代理为例子。
getProxy()需要两个参数,一个是所需要被代理的类invoker,一个是代理类所实现的接口,而这些接口中所定义的方法,就是需要通过被代理达到远程调用生产端的作用。
首先,Dubbo通过getProxy()方法传入所要代理的接口所组成的数组。