# Spring MVC: difference between <mvc:annotation-driven/> and <context:annotation-config/> tags?

I am migrating from Spring 2.5 to Spring 3.

They have introduced <mvc:annotation-driven /> which does some black magic. This is expected to be declared in servlet configuration file only.

In Spring 2.5 I have just used <context:annotation-config /> and <context:component-scan base="..."/> tags declared both in application-context.xml and dispatcher servlet configuration XML with appropriate base packages to scan.

So I wonder what is the difference between mvc:annotation-driven and context:annotation-config tags in servlet config and what can I eliminate in Spring 3 config files?

<context:annotation-config> declares support for general annotations such as @Required, @Autowired, @PostConstruct, and so on.

<mvc:annotation-driven /> declares explicit support for annotation-driven MVC controllers (i.e. @RequestMapping, @Controller, although support for those is the default behaviour), as well as adding support for declrative validation via @Valid and message body marshalling with @RequestBody/ResponseBody.

For details: http://spring.io/blog/2009/12/21/mvc-simplifications-in-spring-3-0/