Proxy 是否将javassist代理字节码写入.class文件?

Proxy 是否将javassist代理字节码写入.class文件?,proxy,decompiling,javassist,Proxy,Decompiling,Javassist,我想对javassist代理进行反编译,以了解ProxyFactory.makeForwarder的实际功能。我发现可以从CtClass将类字节码写入输出流,但如果以ProxyFactory.createClass()开头,则无法理解如何创建CtClass,这类似于Hibernate使用javassist的方式。以下是我尝试过的: public void testProxyToDisk() throws Exception { ProxyFactory f = new ProxyFact

我想对javassist代理进行反编译,以了解ProxyFactory.makeForwarder的实际功能。我发现可以从CtClass将类字节码写入输出流,但如果以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();
}
public void testProxyToDisk()引发异常{
ProxyFactory f=新的ProxyFactory();
f、 设置超级类(Product.class);
f、 setFilter(新方法过滤器(){
公共布尔值isHandled(方法m){
//忽略finalize()
return!m.getName().equals(“finalize”);
}
});
类proxyClass=f.createClass();
ClassPool ClassPool=ClassPool.getDefault();
ClassLoader ClassLoader=ProxyFactory.classLoaderProvider.get(f);
appendClassPath(新装入器ClassPath(类装入器));
CtClass CtClass=classPool.get(proxyClass.getName());//这里有条形码
ctClass.debugWriteFile();
}
这是结果

javassist.NotFoundException: jassist.jassist_163.Product_$$\u javassist_0位于 javassist.ClassPool.get(ClassPool.java:450)位于 javassist.jassist_163.Find2MethodsPerfTest.testProxyToDisk(Find2MethodsPerfTest.java:36)


测试类和产品类在同一个包(javassist.jassist_163)中,fwiw。谢谢。

我本应该更有耐心的:设置ProxyFactory.writeDirectory在设置f.writeDirectory=“e:/temp”之后会起作用;得到了相同的错误。错误是关于找不到代理类,而不是在哪里写入类。最终的解决方案是什么?如果你有解决办法,请回答你自己的问题。