视频资源获取失败
你好,我是何小锋。上一讲我分享了网络通信,其实要理解起来也很简单,RPC 是用来解决两个应用之间的通信,而网络则是两台机器之间的“桥梁”,只有架好了桥梁,我们才能把请求数据从一端传输另外一端。其实关于网络通信,你只要记住一个关键字就行了——可靠的传输。
那么接着上一讲的内容,我们再来聊聊动态代理在 RPC 里面的应用。
如果我问你,你知道动态代理吗? 你可能会如数家珍般地告诉我动态代理的作用以及好处。那我现在接着问你,你在项目中用过动态代理吗?这时候可能有些人就会犹豫了。那我再换一个方式问你,你在项目中有实现过统一拦截的功能吗?比如授权认证、性能统计等等。你可能立马就会想到,我实现过呀,并且我知道可以用 Spring 的 AOP 功能来实现。
没错,进一步再想,在 Spring AOP 里面我们是怎么实现统一拦截的效果呢?并且是在我们不需要改动原有代码的前提下,还能实现非业务逻辑跟业务逻辑的解耦。这里的核心就是采用动态代理技术,通过对字节码进行增强,在方法调用的时候进行拦截,以便于在方法调用前后,增加我们需要的额外处理逻辑。
那话说回来,动态代理跟 RPC 又有什么关系呢?
我说个具体的场景,你可能就明白了。

作者回复: 很棒
作者回复: 很棒
作者回复: 相比于其他框架,其API还是很简单的。举个例子:Class<? extends T> clazz = BYTE_BUDDY.subclass(clz) .method(ElementMatchers.isDeclaredBy(clz)) .intercept(MethodDelegation.to(new ByteBuddyInvocationHandler(invoker))) .make() .load(classLoader, ClassLoadingStrategy.Default.INJECTION) .getLoaded(); try { return clazz.newInstance(); } catch (Exception e) { throw new ProxyException("Error occurred while creating bytebuddy proxy of " + clz.getName(), e); }
作者回复: 作用是一样的
作者回复: 理论上编译期创建是可以的,但实际问题就是怎么确定哪些需要创建呢
作者回复: 很棒
作者回复: 是的,动态代理让用户API调用透明
作者回复: 现在可以了
作者回复: 动态代理可以面向接口编程
作者回复: 是的