将javassist proxy字节码写入.class文件?

时间:2012-03-30 19:24:36

标签: proxy decompiling javassist

我想反编译一个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中。谢谢。

1 个答案:

答案 0 :(得分:1)

我应该更耐心:设置ProxyFactory.writeDirectory可以解决问题