私は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.Find2MethodsPerfTest.testProxyToDisk(Find2MethodsPerfTest.java:36)
でjavassist.ClassPool.get(ClassPool.java:450)で javassist.jassist_163.Product _ $$ _ javassist_0
テストクラスと製品クラスは同じパッケージ(javassist.jassist_163)、fwiwにあります。ありがとうございました。
を行います。同じエラーが発生しました。 – Sunnyday
エラーは、クラスの作成場所ではなく、プロキシクラスを見つけることができないことです。 – Sunnyday