2012-03-30 8 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.Find2MethodsPerfTest.testProxyToDisk(Find2MethodsPerfTest.java:36)

でjavassist.ClassPool.get(ClassPool.java:450)で javassist.jassist_163.Product _ $$ _ javassist_0

テストクラスと製品クラスは同じパッケージ(javassist.jassist_163)、fwiwにあります。ありがとうございました。

答えて

1

私はより多くの患者されている必要があります:設定ProxyFactory.writeDirectoryはf.writeDirectory = "Eを:/ TEMP" を設定した後トリック

+0

を行います。同じエラーが発生しました。 – Sunnyday

+0

エラーは、クラスの作成場所ではなく、プロキシクラスを見つけることができないことです。 – Sunnyday

関連する問題