Spring是否生成验证代码?

时间:2014-06-28 13:02:08

标签: java spring spring-mvc annotations

最近我试图了解spring如何处理@Valid注释。例如,查看以下控制器的方法:

@RequestMapping(value = "/create", method = RequestMethod.POST)
public ModelAndView createEmployee(@Valid EmployeeForm form, Errors errors) {
    if(errors.hasErrors()) {
         //validation errors
    }
    //method code
}

我很难理解errors实例如何实时填充验证错误。在编译控制器期间,Spring是否会在createEmployee方法的开头注入负责验证的代码?如果是这样的代码看起来如何?

我真的试图找到一个在现实生活中如何进行验证的例子,但这是不可能的。请帮帮我。

1 个答案:

答案 0 :(得分:1)

一切都在运行时发生。有关执行验证的详细信息,请参阅reference;有关其他说明,请参阅this post

基本上这是Spring内部工作方式的一部分。当您启动应用程序时,Spring会注册一些bean,bean处理器,可以扫描类路径中的注释类,注册那些找到注释类,为其中一些构建代理等,并使用它们构建上下文。

处理请求时,请求在某个以DispatcherServlet开头的预定执行路径上处理,根据需要从上下文中获取其他bean来处理请求(例如验证)然后转发给您createEmployee中的控制器(由于Spring在您的控制器上找到了@RequestMapping注释,因此已注册为启动)。当您从方法返回时,流程将继续构建模型,选择要显示的视图,然后生成对客户端的响应。

对于您的示例,Spring基本上找到@Valid注释,查找已配置的验证器(由您或由提供的实现配置,例如JSR-303),运行验证器并将验证结果存储在Errors对象。它在处理请求时执行此操作,如上所述,它不会生成代码。

如果您的问题是完全知道Spring如何做到这一点,那么在所有细节中,您可以使用Spring源代码并查看/调试它。