在序列化方面,春季会话范围的 Bean(控制器)和对服务的引用
- 标准情况 - 您有一个带有 的控制器 ()。
@Controller
@Scope("session")
- 放置在会话中的类通常应该实现,以便在服务器重新启动时可以物理存储它们,例如
Serializable
- 如果控制器实现,这意味着它所引用的所有服务(其他弹簧豆)也将被序列化。它们通常是代理,参考交易经理,实体经理工厂等。
Serializable
- 某些服务甚至控制器通过实现 来持有对 的引用的可能性不大,因此这可以有效地表示整个上下文被序列化。鉴于它拥有许多连接 - 即无法按想法序列化的东西,它将在损坏状态下恢复。
ApplicationContext
ApplicationContextAware
到目前为止,我基本上忽略了这些问题。最近,我想声明我所有的弹簧依赖关系,并通过静态实用程序类将它们放回去,以便将请求/ServletContext保存在.这很乏味,但它可以保证,当对象被反序列化时,其依赖项将与当前应用程序上下文“最新”。transient
readResolve()
WebApplicationContextUtils
ThreadLocal
是否有任何公认的做法,或者任何序列化春季上下文部分的指南。
请注意,在 JSF 中,受管 Bean(~控制器)是有状态的(与基于操作的 Web 框架不同)。因此,也许我的问题更适用于JSF,而不是spring-mvc。