0

ProxyFactory.makeForwarder が実際に何をするかを理解するために、javassist プロキシを逆コンパイルしたいと思います。クラス バイトコードを CtClass から OutputStream に書き込むことは可能ですが、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();
}

これが結果です。

javassist.NotFoundException: javassist.jassist_163.Product_$$_javassist_0 at javassist.ClassPool.get(ClassPool.java:450) at javassist.jassist_163.Find2MethodsPerfTest.testProxyToDisk(Find2MethodsPerfTest.java:36)

Test クラスと Product クラスは同じパッケージ (javassist.jassist_163) にあります。ありがとうございました。

4

1 に答える 1

1

私はもっ​​と辛抱強くあるべきでした: ProxyFactory.writeDirectory を設定するとうまくいきます

于 2012-03-30T19:37:09.287 に答える