gpt4 book ai didi

java - 序列化后连接变量的干净方法?

转载 作者:行者123 更新时间:2023-11-28 22:18:06 25 4
gpt4 key购买 nike

我有一个 Web 应用程序(tomcat 7、spring 4.2、ZK 7)。由于我有两台服务器可以“接管”对方的 session ,因此需要对 session 进行序列化,这导致我必须在反序列化后以某种方式重新初始化 spring 服务。由于ZK的结构,要求Composer(一种Controller)需要序列化(并且这些Composer使用Services)。

例如,假设我有一个需要序列化的对象。这个对象有一个 Spring 服务的引用(它不能被序列化,因为最后,有一个对 DataSourceSqlSessionTemplate 等的引用 - 所有这些都不是可序列化)。

那么,现在如何优雅的解决这个问题呢?有什么方法可以将 Spring 集成到反序列化过程中,以便 Spring 在反序列化之后(甚至同时)自动重新连接我的( transient 、 Autowiring 的)变量?

当前的解决方案是让一个单例 bean 周围有一个 @Autowired 对 ApplicationContext 的引用,这样我就可以通过 getInstance() 访问它以获取对服务的引用,但是这个解决方案不是很优雅,而且还使测试更加复杂(因为我更喜欢在不加载 Spring 上下文的情况下进行单元测试)。

是否有其他更好的方法来做到这一点?

最佳答案

看起来,最明显和优雅的答案是声明一个 bean 的 ScopedProxyMode,将它包装到一个代理中并动态设置不可序列化的依赖项,例如......

@Scope(proxyMode=ScopedProxyMode.TARGET_CLASS)

可以在 Spring 文档中找到更多信息 here .这也已经讨论过here已经在 StackOverflow 上了(当他们宣布它时有一个指向演示文稿的链接)。

关于java - 序列化后连接变量的干净方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36082564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com