dubbo源码:获取dubbo Filter中invoker的目标方法

Posted 方辰的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dubbo源码:获取dubbo Filter中invoker的目标方法相关的知识,希望对你有一定的参考价值。

这里使用的代理是dubbo默认javassist动态代理

private Object getTargetClass(Object invoker) throws Exception {  Field invokerField = invoker.getClass().getDeclaredField("invoker"); invokerField.setAccessible(true); // 此时javassistProxyFactoryInvoker是JavassistProxyFactory内部方法getInvoker返回的AbstractProxyInvoker匿名实现类 AbstractProxyInvoker javassistProxyFactoryInvoker = (AbstractProxyInvoker)invokerField.get(invoker);   /** ** javassistProxyFactoryInvoker.getClass() 是AbstractProxyInvoker匿名实现类的运行实例 ** javassistProxyFactoryInvoker.getClass().getSuperclass() 是 AbstractProxyInvoker 实例 */ Field proxy = javassistProxyFactoryInvoker.getClass().getSuperclass().getDeclaredField("proxy"); proxy.setAccessible(true); // proxyValue即是实现类(如BActServiceImpl实例) Object proxyValue = proxy.get(javassistProxyFactoryInvoker);  /** ** proxyValue.getClass().getSuperclass()是java.lang.reflect.Proxy 实例 **/ Field jdkDynamicAopProxy = proxyValue.getClass().getSuperclass().getDeclaredField("h"); jdkDynamicAopProxy.setAccessible(true); Object jdkDynamicAopProxyValue = jdkDynamicAopProxy.get(proxyValue);  Field advised = jdkDynamicAopProxyValue.getClass().getDeclaredField("advised"); advised.setAccessible(true); return ((AdvisedSupport)advised.get(jdkDynamicAopProxyValue)).getTargetSource().getTarget();}


以上是关于dubbo源码:获取dubbo Filter中invoker的目标方法的主要内容,如果未能解决你的问题,请参考以下文章

Dubbo的Filter源码解析

dubbo源码分析之过滤器Filter-12

dubbo源码阅读-Filter默认实现之CacheFiler

dubbo源码阅读-Filter默认实现之TimeoutFilter

Dubbo Filter机制概述

dubbo源码阅读-Filter默认实现之ExceptionFilter