2

私がやりたいのは、コマンドパターンを実装するクラスをシリアル化して、後で実行できるようにすることです。すべての世界で、匿名クラスをシリアル化したいと思います(これに関する問題を認識しています)

少し複雑なのは、私が春の環境にいて、シリアル化する匿名クラスがCGLibによってプロキシされるクラスで定義されていることです。

私の最初の試み:

public interface CallLater implements Serializeable {
     public run();
}


@Service
public class TestService implements Serializeable {

     public doSomethingMore() { /* Code */ }

     public void doSomething() {

         CallLater job = new CallLater() {
            private static final long serialVersionUID = 4415017504667122645L;

            @Override
            public void run() {
               doSomethingMore();

            }
         }

         storeJob(job);
    }
}

たとえば、storeJobはオブジェクトをシリアル化し、後で使用できるように保存します。失敗するのはこの部分です。このためのコードは含まれていませんが、これは単なるObjectOutputStream呼び出しです

TestServiceクラス全体をシリアル化する必要があることを認識しています。問題は、ラップされてCGLibプロキシがスローされ、このプロキシがシリアル化可能を実装していないことです(これはシリアル化できないと思います)。

どんな助けでも大歓迎です。

4

1 に答える 1

0

「ターゲット」のみをシリアル化する必要があります。それで、あなたは代理権への言及を持っていますか?あなたがそれをシリアル化できるように、そのプロキシのターゲットを取得するために離れているでしょう。

やるべきことは、シリアル化の直前にアプリをブレークポイントし、必要なプロパティについてそのコンテキストで掘り下げることです。または、プロキシユーティリティなどがある可能性があります。

于 2010-12-15T21:31:46.720 に答える