控制器应在Spring MVC中以应用程序为范围(您不需要显式地将它们作为范围,因为这是默认设置)。
任何请求级别的数据都应使用模型属性来完成:
@ModelAttribute("foo")public Foo createFoo(@RequestParam("bar") int bar) { return new Foo(bar);}@RequestMapping(...)public ModelAndView baz(HttpServletRequest req, HttpServletResponse response, @ModelAttribute("foo") Foo foo) { ...}Spring将自动创建“ Foo”实例(通过您的“
createFoo”)方法,并将其放入请求范围。然后,通过在映射方法中注释方法参数,它将自动从请求范围中拉出该参数并将其传递给您的方法。
如果要将模型属性存储在会话范围中,请将此注释添加到控制器类中:
@SessionAttributes({"foo"})这意味着您不应仅在模型属性中(无论是在请求范围内还是在会话范围内)在控制器本身中具有任何状态,而应将该状态注入到映射的方法调用中。



