Clear separation of roles. Model, controller, validator, command object, form object, DispatcherServlet, handler mapping, view resolver, etc. Each role can be fulfilled/extended by a specialized object.
Powerful and straightforward configuration of framework and application API as JavaBeans.
Reusable business code. You can use existing business objects as command or form objects instead of mirroring them in order to extend a particular framework base class.
Customizable binding and validation.
Customizable handler mapping and view resolution.
Convenient locale and theme resolution.
A JSP form tag library, introduced in Spring 2.0, makes it easier to write forms in JSP pages.
support for different response types; generate XML, JSON, Atom etc.
Flexible data binding: on a type mismatch, it is displayed as a validation error on the screen. Any plain Business POJO can be directly configured as form-backing object.