在以下控制器中
@Controller
public class MyFormController {
@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
dateFormat.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
}
// ...
}
该类不继承任何其他类,或者它没有任何WebDataBinder实例变量。那么如何存储自定义编辑器以及在哪里?
答案 0 :(得分:0)
Spring MVC基础架构很复杂。有许多部分聚集在一起调用您的@Controller
处理程序方法。我在答案here中解释了一些内容。
总之,Spring MVC会在@Controller
类中扫描@RequestMapping
注释方法。它在RequestMappingHandlerMapping
中为这些映射创建映射,并使用RequestMappingHandlerAdapter
分发给它们,即。调用你的处理程序方法。
在调用该方法之前,它会经历几个内务处理步骤。您可以在源代码here中看到这些内容。简短版本是:
HttpServletRequest
和HttpServletResponse
包装在适配器中。Model
和WebDataBinder
个实例的工厂(后者来自您的@InitBinder
方法)。ServletInvocableHandlerMethod
,用HandlerMethodArgumentResolver
封装你的处理程序方法的调用,为你的处理程序方法生成参数,并HandlerMethodReturnValueHandler
处理你的处理程序方法的返回值。ModelAndViewContainer
,可能会用于稍后将视图呈现为HTTP响应。然后它调用方法。
您感兴趣的WebDataBinder
对象在上述执行上下文中的各个位置存储和使用。