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 回答