我想反编译一个 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.Find2MethodsPerfTest.testProxyToDisk(Find2MethodsPerfTest.java:36) 处的 javassist.ClassPool.get(ClassPool.java:450) 处的 javassist.jassist_163.Product_$$_javassist_0
测试类和产品类在同一个包(javassist.jassist_163)中,fwiw。谢谢你。