Java CGLib与序列化

Java CGLib与序列化,java,spring,serialization,command-pattern,cglib,Java,Spring,Serialization,Command Pattern,Cglib,我想做的是序列化一个 实现一个命令模式,以便以后可以运行它。最好 在所有的世界中,我想序列化一个匿名类(我是 意识到这方面的问题) 让它有点复杂的是,我在一个春天的环境中 我希望序列化的匿名类是在一个将 由CGLib代理 我最初的尝试: public interface CallLater implements Serializeable { public run(); } @Service public class TestService implements Serialize

我想做的是序列化一个 实现一个命令模式,以便以后可以运行它。最好 在所有的世界中,我想序列化一个匿名类(我是 意识到这方面的问题)

让它有点复杂的是,我在一个春天的环境中 我希望序列化的匿名类是在一个将 由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代理,而该代理未实现可序列化 (我的猜测是这个不能序列化)


非常感谢您的帮助。

您只需序列化“目标”。所以你提到了代理权,对吗?要获取该代理的目标,您将需要很多时间,以便可以序列化该代理


要做的事情是在序列化之前中断应用程序,并在该上下文中挖掘您需要的属性。或者可能有一些代理UTIL或其他东西。

您应该只序列化“目标”。所以你提到了代理权,对吗?要获取该代理的目标,您将需要很多时间,以便可以序列化该代理


要做的事情是在序列化之前中断应用程序,并在该上下文中挖掘您需要的属性。或者可能有一些代理UTIL或其他东西。

堆栈跟踪会很有用CGLib代理是TestService的一个子类,因此实现了可序列化,不是吗?也许它通过实现writeObject方法来阻止序列化?@Christian:我猜,
TestService
在某个地方引用了一些不可序列化的东西。堆栈跟踪会有帮助CGLib代理是TestService的一个子类,因此实现了可序列化,不是吗?也许它通过实现writeObject方法来阻止序列化?@Christian:我猜,
TestService
在某个地方引用了一些不可序列化的内容。CGLib代理是否会改变方法的行为,从而使代理实例内的调用触发代理方法?如果是这样,解决方案中的反序列化TestService目标Michael将不再被代理,因此它将缺少代理添加到doSomethingMore()方法中的任何行为。no-spring的默认aop不允许从实例中调用代理版本。Spring的aop在方法级别工作,不会改变实际的类。但是,您应该调查代理存在的原因,目的是什么?如果这很重要,那么重新加载Springbean并代理它可能会很棘手。也许您应该将代理层从正在序列化的对象中抽象出来CGLib代理是否会改变方法的行为,从而使代理实例内的调用触发代理方法?如果是这样,解决方案中的反序列化TestService目标Michael将不再被代理,因此它将缺少代理添加到doSomethingMore()方法中的任何行为。no-spring的默认aop不允许从实例中调用代理版本。Spring的aop在方法级别工作,不会改变实际的类。但是,您应该调查代理存在的原因,目的是什么?如果这很重要,那么重新加载Springbean并代理它可能会很棘手。也许应该将代理层从序列化的对象中抽象出来