Java CGLib与序列化
我想做的是序列化一个 实现一个命令模式,以便以后可以运行它。最好 在所有的世界中,我想序列化一个匿名类(我是 意识到这方面的问题) 让它有点复杂的是,我在一个春天的环境中 我希望序列化的匿名类是在一个将 由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
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并代理它可能会很棘手。也许应该将代理层从序列化的对象中抽象出来