0

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

4

1 回答 1

1

我应该更有耐心:设置 ProxyFactory.writeDirectory 就可以了

于 2012-03-30T19:37:09.287 回答