如何在反序列化时重新连接单例Spring bean

Lad*_*ein 8 java serialization spring dynamic-proxy

我想在反序列化之后将单例范围的依赖项重新注入原型Spring bean.

假设我有一个Process bean,它依赖于Repository bean.Repository bean的作用域是单例,但Process bean是原型作用域.我会定期对序列进行序列化,然后对其进行反序列化.

class Process {
   private Repository repository;
   // getters, setters, etc.
}
Run Code Online (Sandbox Code Playgroud)

我不想序列化和反序列化存储库.我也不想将"瞬态"放在成员变量上,该成员变量在Process中包含对它的引用,也不是对某种代理的引用,或者除了声明为Repository的普通旧成员变量之外的任何东西.

我想我想要的是让Process依赖于一个可序列化的代理,该代理指向(通过瞬态引用)到Repository,并且在反序列化时,可以再次找到Repository.我怎么能自定义Spring呢?

我想我可以使用代理来保存依赖引用,就像.我希望我可以使用那种确切的技术.但是我看到Spring生成的代理不是可序列化的,并且文档说如果我将它与单例bean一起使用,我将得到一个例外.

我可以在单例bean上使用自定义作用域,当要求自定义作用域bean时,它总是提供代理.这是一个好主意吗?其他想法?

Pab*_*jim 1

在反序列化对象时添加使用方面来添加注入步骤怎么样?

为此,您需要 AspectJ 或类似的工具。它的工作方式与 Spring 中的 @Configurable 函数非常相似。

例如,围绕“private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException”方法添加一些建议

本文也可能有所帮助:http://java.sun.com/developer/technicalArticles/Programming/serialization/