2012-03-30 71 views
0

我想反编译一个javassist代理来理解ProxyFactory.makeForwarder的实际功能。我发现可以从CtClass中将类字节码写入OutputStream,但如果以ProxyFactory.createClass()开头,则无法弄清楚如何创建CtClass - 模仿Hibernate如何使用javassist。这是我试过的:将javassist代理字节码写入.class文件?

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.jassist_163.Find2MethodsPerfTest.testProxyToDisk(Find2MethodsPerfTest.java:36)在 javassist.ClassPool.get(ClassPool.java:450)javassist_0

测试类和产品类位于相同的包(javassist.jassist_163)fwiw中。谢谢。

回答

1

我应该更患者:设置ProxyFactory.writeDirectory的伎俩

+0

设置f.writeDirectory = “E:/ TEMP” 之后;得到了同样的错误。 – Sunnyday 2017-11-03 16:08:44

+0

错误是关于无法找到代理类,而不是在哪里写类。 – Sunnyday 2017-11-03 16:19:26