我想反编译一个javassist代理,以了解ProxyFactory.makeForwarder实际上做了什么。我看到可以从CtClass向OutputStream编写类字节码,但是如果用ProxyFactory.createClass()开始,则无法弄清楚如何创建CtClass - 模仿Hibernate如何使用javassist。这是我试过的:
public void testProxyToDisk() throws Exception {
ProxyFactory f = new ProxyFactory();
f.setSuperclass(Product.class);
f.setFilter(new MethodFilter() {
public boolean isHandled(Method m) {
// ignore finalize()
return !m.getName().equals("finalize");
}
});
Class<?> proxyClass = f.createClass();
ClassPool classPool = ClassPool.getDefault();
ClassLoader classLoader = ProxyFactory.classLoaderProvider.get(f);
classPool.appendClassPath(new LoaderClassPath(classLoader));
CtClass ctClass = classPool.get(proxyClass.getName()); //barfs here
ctClass.debugWriteFile();
}
这是结果。
javassist.NotFoundException: javassist.jassist_163.Product _ $$ _ javassist_0 at javassist.ClassPool.get(ClassPool.java:450)at javassist.jassist_163.Find2MethodsPerfTest.testProxyToDisk(Find2MethodsPerfTest.java:36)
Test class和Product类在同一个包(javassist.jassist_163),fwiw中。谢谢。
答案 0 :(得分:1)
我应该更耐心:设置ProxyFactory.writeDirectory可以解决问题