在最近的一个基于Web的Java项目中,我遇到过各种各样的地方,我已经看到基于Spring的控制器/组件实现Serializable
。
我很好奇为什么控制器/组件应该实现Serializable
?
我认为这样做是错误的做法,到目前为止搜索任何实施Serializable
的方案都没有产生任何结果。我认为它违反了MVC原则并且是非常规的。您可能希望将域/业务对象与控制器/组件分开。
我想纠正代码库中的这种不良做法,但只是想确保我有理由这样做。
任何解释此案例的解释/场景都将受到赞赏。
答案 0 :(得分:2)
控制器不需要Serializable
。他们是无国籍的,只是在模型和视图之间进行调解。对于其他无状态组件也可以这样说。制作它们Serializable
没有任何好处。
有状态模型对象通常是Serializable
,因为它们有时会放在HttpSession
中。应用服务器要求会话中的对象为Serializable
,以用于复制和持久性目的。
答案 1 :(得分:0)
使用spring session时,一个特定的用例需要Controller类来实现Serializable。
Spring会话将外部化会话-我将Spring会话与JDBC结合使用以协调容器之间的会话。当您拥有Session Scoped Controller时,spring会话将使用byte []列在数据库中对该状态进行序列化。