【问题标题】:Spring Controller/Component Implements SerializableSpring 控制器/组件实现可序列化
【发布时间】:2014-01-24 02:31:26
【问题描述】:

在最近的一个基于 Web 的 Java 项目中,我遇到了很多地方,我看到基于 Spring 的 Controller/Component 实现了Serializable

我很好奇,为什么控制器/组件必须实现Serializable

我认为这样做是错误的做法,到目前为止搜索任何实现Serializable 的方案都没有产生任何结果。我认为它违反了MVC原则并且非常规。您可能希望将 Domain/Business 对象与 Controllers/Components 分开。

我想纠正代码库中的这种不良做法,但只是想确保我有这样做的理由。

任何说明此案例的解释/场景将不胜感激。

【问题讨论】:

  • 听起来我错了。你可以发布代码吗?

标签: java spring spring-mvc serialization


【解决方案1】:

控制器不需要是Serializable。它们是无状态的,只是在模型和视图之间进行调解。其他无状态组件也是如此。将它们设为Serializable 没有任何好处。

但是,有状态模型对象通常是 Serializable,因为它们有时被放置在 HttpSession 中。应用服务器要求会话中的对象为 Serializable 以用于复制和持久化目的。

【讨论】:

    【解决方案2】:

    需要 Controller 类实现 Serializable 的特定用例是使用 spring session 时。

    Spring session 会将 session 外部化——我使用 spring session 和 JDBC 来协调容器之间的 session。当你有一个 Session Scoped Controller 时,spring 会话将使用 byte[] 列将该状态序列化到数据库中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-15
      • 2020-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多