【问题标题】:Spring MVC: form-backing bean populating through constructor?Spring MVC:通过构造函数填充表单支持bean?
【发布时间】:2015-06-29 21:09:38
【问题描述】:

我想知道在接收 POST 数据(无论来自系统还是 Web 表单)时是否可以通过构造函数注入填充 bean。我想知道这是否比拥有大量二传手更好,以及这是否会产生一些我不知道的不良副作用。

我目前在 Spring 中使用表单支持 bean 并实现了许多 getter/setter,但主要是这个 bean 作为数据结构工作,只保存和验证注入的内容以提供模板引擎的数据。如果我可以通过构造函数注入所有 POST 数据,我可以省略所有的 setter,但同时构造函数可以处理很多参数。

这是一个明智的想法,还是这里的setter-injection最佳实践^^"

【问题讨论】:

  • 为什么不使用Validator 来验证数据?
  • 我已经在使用验证器了。我的问题是,如果仅通过构造函数填充表单支持 bean 是否明智。

标签: java spring-mvc constructor-injection


【解决方案1】:

我的问题的答案基本上是这个[post]。尽管这篇博文主要处理不可变对象的处理,但这个概念是可以转移的。

作者使用了一个自定义的 WebArgumentResolver。基本上,您手动选择到达的 post 数据并调用 bean 的构造函数来填充它的字段。
此外,在评论部分提到您也可以使用 Spring DataBinder 类。关于binder.initDirectFieldAccess(); 的提示是一个值得了解的评论。

这样很容易瘦我的bean,所以它不再需要伪装成一个对象,尽管它是一个数据结构。

考虑到这似乎是一种利用不可变对象的完全可行的方法,我得出结论,它也可能符合我的目的。虽然我可能不会让我的 bean 不可变,但使用大量的 setter 和 getter 污染代码是无利可图的,即使可以通过构造函数填充字段。

【讨论】:

    猜你喜欢
    • 2011-03-28
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多