Search code examples
javaspringmodel-view-controllerannotationsportlet

MVC Annotation Spring MVC <mvc:annotation-driven />


I'm very new to Spring MVC and I have one question for you.

I know that tag <mvc:annotation-driven /> handles the annotation such as @Controller, @RequestMapping in a servlet configuration, but I'm using portlets and I am very curious how this annotation works here?

Thx!


Solution

  • mvc:annotation-driven is used for enabling the Spring MVC components with its default configurations.

    If you dont include mvc:annotation-driven also your MVC application would work if you have used the context:component-scan for creating the beans or defined the beans in your XML file

    . But, mvc:annotation-driven does some extra job on configuring the special beans that would not have been configured if you are not using this element in your XML file.

    This tag would registers the HandlerMapping and HandlerAdapter required to dispatch requests to your @Controllers. In addition, it also applies some defaults based on what is present in your classpath. Such defaults are:

    • Using the Spring 3 Type ConversionService as a simpler and more robust alternative to JavaBeans PropertyEditors
    • Support for formatting Number fields with @NumberFormat

    • Support for formatting Date, Calendar, and Joda Time fields with @DateTimeFormat, if Joda Time is on the classpath

    • Support for validating @Controller inputs with @Valid, if a JSR-303 Provider is on the classpath
    • Support for reading and writing XML, if JAXB is on the classpath
    • Support for reading and writing JSON, if Jackson is on the classpath

    context:component-scan element in the spring configuration file would eliminate the need for declaring all the beans in the XML files. Look at the below declaration in your spring configuration file:

    <context:component-scan base-package="org.controller"/>
    

    The above declaration in the spring application configuration file would scan the classes inside the specified package and create the beans instance. Note that it could create beans only if that class is annotated with correct annotations. The following are the annotations scanned by this element:

    • @Component
    • @Repository
    • @Service
    • @Controller