我们知道,在 Dubbo 框架中,对外发布服务时,会把每个服务提供者的实现类通过 Javassist 包装为一个 Wrapper 类,以减少反射调用开销。这个 Wrapper 是动态生成的,默认是不输出 class 文件的,如果想查看生成的 class 文件到底是什么,可通过设置 CtClass.debugDump 字段,添加一个输出路径,这样就可以查看动态生成的 class 文件了。
示例:
CtClass.debugDump = ApiProvider.class.getResource("/").getPath();
这样,就会在指定路径下生成相关的 class 文件,通过反编译工具打开查看即可。
public Object invokeMethod(Object var1, String var2, Class[] var3, Object[] var4) throws InvocationTargetException {
UserServiceImpl var5;
try {
var5 = (UserServiceImpl)var1;
} catch (Throwable var8) {
throw new IllegalArgumentException(var8);
}
try {
if ("doOther".equals(var2) && var3.length == 0) {
var5.doOther();
return null;
}
if ("doSome".equals(var2) && var3.length == 1) {
return var5.doSome((String)var4[0]);
}
} catch (Throwable var9) {
throw new InvocationTargetException(var9);
}
throw new NoSuchMethodException("Not found method \"" + var2 + "\" in class com.icheetor.service.impl.UserServiceImpl.");
}