我们知道,在 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.");
}