四:dubbo源码(dubbo-rcp模块)学习过程中,思考问题

说明:dubbo-rcp包远程调用模块,抽象各种协议,以及动态代理,只包含一对一的调用,不关心集群的管理。

1:ConfigUtils.loadProperties()方法的242行,List进行new了2次。

四:dubbo源码(dubbo-rcp模块)学习过程中,思考问题_第1张图片

2:疑惑transient声明变量?

答案:总之,java 的transient关键字为我们提供了便利,你只需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。

3:dubbo-rpc模块阅读JavassistProxyFactory和JdkProxyFactory过程中遇到的阻力?

(1)javassit是一个开源的分析、编辑和创建Java字节码的类库,需要复习???

(2)java反射技术,需要复习???

(3)设计模式-之访问者模式???

(4)动态代理、静态代理区别?

A:静态代理

四:dubbo源码(dubbo-rcp模块)学习过程中,思考问题_第2张图片

说明:

当在代码阶段规定这种代理关系,Proxy类通过编译器编译成class文件,当系统运行时,此class已经存在了。这种静态的代理模式固然在访问无法访问的资源,增强现有的接口业务功能方面有很大的优点,但是大量使用这种静态代理,会使我们系统内的类的规模增大,并且不易维护;并且由于Proxy和RealSubject的功能 本质上是相同的,Proxy只是起到了中介的作用,这种代理在系统中的存在,导致系统结构比较臃肿和松散。

B:动态代理

四:dubbo源码(dubbo-rcp模块)学习过程中,思考问题_第3张图片

说明:

代理类处理的逻辑很简单:在调用某个方法前及方法后做一些额外的业务。换一种思路就是:在触发(invoke)真实角色的方法之前或者之后做一些额外的业务。那么,为了构造出具有通用性和简单性的代理类,可以将所有的触发真实角色动作交给一个触发的管理器,让这个管理器统一地管理触发。这种管理器就是Invocation Handler。动态代理模式的结构跟上面的静态代理模式稍微有所不同,多引入了一个InvocationHandler角色。

先解释一下InvocationHandler的作用:在静态代理中,代理Proxy中的方法,都指定了调用了特定的realSubject中的对应的方法:在上面的静态代理模式下,Proxy所做的事情,无非是调用在不同的request时,调用触发realSubject对应的方法;更抽象点看,Proxy所作的事情;在Java中 方法(Method)也是作为一个对象来看待了,动态代理工作的基本模式就是将自己的方法功能的实现交给 InvocationHandler角色,外界对Proxy角色中的每一个方法的调用,Proxy角色都会交给InvocationHandler来处理,而InvocationHandler则调用具体对象角色的方法。如下图所示:

四:dubbo源码(dubbo-rcp模块)学习过程中,思考问题_第4张图片


区别:

在面向对象的编程之中,如果我们想要约定Proxy 和RealSubject可以实现相同的功能,有两种方式:

 a.一个比较直观的方式,就是定义一个功能接口,然后让Proxy 和RealSubject来实现这个接口。

 b.还有比较隐晦的方式,就是通过继承。因为如果Proxy 继承自RealSubject,这样Proxy则拥有了RealSubject的功能,Proxy还可以通过重写RealSubject中的方法,来实现多态。

其中JDK中提供的创建动态代理的机制,是以a 这种思路设计的,而cglib 则是以b思路设计的。

(5)jdk动态代理机制?思考???

(6)cglib动态代理机制?思考???

(7)hessian的实现原理???扒一下源码???

(8)apache httpClient的原理???扒一下源码???

(9)RMI:远程方法调用(Remote Method Invocation)???复习???博客地址:http://blog.csdn.net/a19881029/article/details/9465663

(10)了解Apache Thrift的实现原理???

你可能感兴趣的:(四:dubbo源码(dubbo-rcp模块)学习过程中,思考问题)