Spring: 会话作用域Bean的序列化

3
我有一个作用域为session的Spring bean。这个bean持有对另一个不可序列化的单例bean的引用。如果我想序列化会话范围的bean,最好的方法是什么?
相同的问题已经在这里提出:Spring session-scoped beans (controllers) and references to services, in terms of serialization 接受的答案是:
[...]在spring 3.0中通过为非可序列化的bean提供代理来解决此问题,该代理从当前应用程序上下文获取实例
据我所了解,在链接视频中的发言者看来,它应该“只是工作”。但在我的情况下,它并不起作用!当我尝试序列化我的会话范围的bean时,我得到一个NotSerializableException。
我该如何解决这个问题?
2个回答

1
你需要指示Spring创建该代理。在基于XML的配置中,通过<aop:scoped-proxy/>标签,在注释中通过component-scan模式:
@Scope(proxyMode = ScopedProxyMode.INTERFACES) 

在你的控制器类中。


-2

您可以将单例引用字段标记为transient。然后查看如何在反序列化后执行方法并从ApplicationContext中加载引用。 此外,请提供堆栈跟踪。

P.S.

使用会话休眠不是一个好主意。


它只是慢而且使用了很多IO。目前我们有很多RAM - 足以容纳会话。 - Michail Nikolaev
我接受了你的答案。但是,与其在所有我的会话作用域bean中实现readObject,我更喜欢以下方法:http://justonjava.blogspot.hk/2011/02/session-passivation-and-spring-part-1.html - Sebi
2
该应用程序在启用了会话复制的Weblogic集群上运行。这就是我必须对会话对象进行序列化的原因。 - Sebi
在反序列化后,您是如何获取应用程序上下文实例的? - Roy Truelove
不,你所链接的问题中并没有包含从ApplicationContext加载引用的示例。据我所知,这是不可能的,因为要获取ApplicationContext,你需要具有ServletContext,而在readObject方法中显然没有该对象。 - 9ilsdx 9rvj 0lo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接