Proxy 是否将javassist代理字节码写入.class文件?
我想对javassist代理进行反编译,以了解ProxyFactory.makeForwarder的实际功能。我发现可以从CtClass将类字节码写入输出流,但如果以ProxyFactory.createClass()开头,则无法理解如何创建CtClass,这类似于Hibernate使用javassist的方式。以下是我尝试过的: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
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”之后会起作用;得到了相同的错误。错误是关于找不到代理类,而不是在哪里写入类。最终的解决方案是什么?如果你有解决办法,请回答你自己的问题。