Spring Web MVC和新建bean

3
我们正在开发一个基于Spring 3.0.5 Web MVC的应用程序。在我们的代码中,我们经常会做这样的事情:
@ModelAttribute(ModelKeys.SOME_BEAN)
public SomeBean newSomeBean() {
  return new SomeBean();
}

我认为这并不是必要的。但如果真的不是,那么我想知道为什么它能够在那么多代码审查中被忽略?在我的理解中,如果控制器方法需要一个新的SomeBean,那么在该方法中使用@ModelAttribute注释参数应该就足够了吧?Spring将使用默认构造函数来创建所需的bean以调用控制器方法,例如:

@RequestMapping(method = RequestMethod.POST)
public String doIt(
  @ModelAttribute(ModelKeys.SOME_BEAN) final SomeBean bean,
  final BindingResult bindingResult)
{
  ...
}

在这里,Spring会创建SomeBean的一个实例,并尝试从POST的数据绑定到它中去,对吗?没有必要像第一个代码片段中那样写这个方法,你能确认一下这点或者给我你的想法吗?如果我直接删除所有这些无用的方法,只是简单地创建一个空的bean对象,是否会存在风险呢?


1
当前的代码是否可能按照早期版本Spring(例如2.5.6)中被确认为正确的方式运行,而现在使用Spring 3.0.5时,有新的更简洁的方法来完成同样的事情?我可以想到许多类似的例子,但在这个特定的例子中我不确定。 - Kevin
是的,事实上这很有可能。我在其他各个领域也看到了许多旧的做法。这种代码在早期版本的Spring中可能是必要的... - Peter Perháč
1个回答

2

@ModelAttribute注解在方法上不会将bean属性与HTTP请求参数绑定。这与同一注解在方法参数上的作用有很大区别。这种方法适用于在模型中填充一些不依赖于请求参数的数据,例如从字典中获取的组合框的值。如果您在控制器中有几个处理程序方法,例如查看/更改/删除相同类型的对象,并且您需要在所有这些方法中使用相同的一组模型属性,则特别有帮助。


我终于理解了这个答案。我现在明白我们为什么要做这些事情了 - 我还查看了Spring MVC源代码。 - Peter Perháč

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