我不了解Spring MVC的流程,以下是我所面临的一些疑问。
@RequestMapping(value = "/addUser",method = RequestMethod.POST)
public ModelAndView addUser(@RequestParam("name") String name, @RequestParam("age") Integer age)
{
// demo method
}
name
和age
字段如何绑定?我是谁(任何拦截器)?age
字段解析为Integer?User
的{{1}}对象?模型属性绑定
@ModelAttribute
@RequestMapping(method = RequestMethod.POST, value = "doLogin")
public ModelAndView doLogin( @ModelAttribute("user") User userModel, HttpSession httpSession)
{
}
的对象?我的意思是流动。HttpSession
,那么如果我有1000个用户访问我的Web应用程序,是不是每个用户都会获得不同的对象?那怎么样Singleton
?答案 0 :(得分:6)
使用@RequestMapping
注释方法时,RequestMappingHandlerAdapter
将register built-in argument resolvers。
将扫描处理程序方法的参数,并根据类型或注释,适当的参数解析程序将启动。例如,对于@RequestParam
注释,将调用RequestParamMethodArgumentResolver
参数解析器会指导转换和绑定(如果适用)。转换由Converter
或PropertyEditor
的适当实施处理。绑定由DataBinder
的适当实例处理。对于RequestParamMethodArgumentResolver
的情况,例如@RequestParam("age")
,NumberEditor
指导转化,WebDataBinder
指导约束。
您的示例中的不同情况都是上述流程的主题,但不同的参数解析器会起作用,例如: ModelAttributeMethodProcessor
,编辑器的不同转换器启动(您可以为自定义类型注册自定义转换器,或者User
将调用默认构造函数等。)
关于单例困境,它指的是组件的单个实例,它只涉及组件的实例变量。其中的方法和参数可以作为新实例,它不会从单例视角中起作用