1、<mvc:annotation-driven>
Spring 3.0.x中使用了mvc:annotation-driven后,默认会帮我们注册默认处理请求,参数和返回值的类,其中最主要的两个类:DefaultAnnotationHandlerMapping 和 AnnotationMethodHandlerAdapter ,分别为HandlerMapping的实现类和HandlerAdapter的实现类,从3.1.x版本开始对应实现类改为了RequestMappingHandlerMapping和RequestMappingHandlerAdapter。
HandlerMapping的实现类的作用
实现类RequestMappingHandlerMapping,它会处理@RequestMapping 注解,并将其注册到请求映射表中。
HandlerAdapter的实现类的作用
实现类RequestMappingHandlerAdapter,则是处理请求的适配器,确定调用哪个类的哪个方法,并且构造方法参数,返回值。
当配置了mvc:annotation-driven/后,Spring就知道了我们启用注解驱动。然后Spring通过context:component-scan/标签的配置,会自动为我们将扫描到的@Component,@Controller,@Service,@Repository等注解标记的组件注册到工厂中,来处理我们的请求。
<mvc:annotation-driven />的可选配置
<mvc: annotation-driven message-codes-resolver="bean name" validator="bean name" conversion-service="bean name" ignoreDefaultModelOnRedirect="true or false">
<mvc:message-converters>
<bean></bean>
</mvc:message-converters>
<mvc:argument-resolvers>
<bean></bean>
</mvc:argument-resolvers>
<mvc:return-value-handlers>
<bean></bean>
</mvc:return-value-handlers>
</mvc:annotation-driven>
2、<context:annotation-config/>(其功能被第三个讲到的标签包含)
使用该标签为我们自动声明一些bean,从而能让我们正常使用@Autowried、@ Resource 、@ PostConstruct、@ PreDestroy等等一些常用的注解。
不使用该标签的话,你想用以上注解,就只能如:<bean class="org.springframework.beans.factory.annotation. AutowiredAnnotationBeanPostProcessor "/> 这样手动声明对应的bean,才可以正常使用@Autowried注解 。相当麻烦。
3、<context:component-scan base-package=”XX.XX”/>
**首先要说的一点:此标签拥有<context:annotation-config/>(第二个标签↑)标签的所有功能,所以一般配置文件中写该标签就不用写<context:annotation-config/>标签了。
**重点2:对于controller包的扫描标签只能在springmvc的配置文件中书写,因为controller由springmvc控制,如果写在spring的配置文件applicationContext.xml中就会出现问题。而对service包的扫描放在spring的配置文件中。对mapper的扫描比较特殊,不使用该标签进行扫描,而是采用声明bean并添加属性的方式。
在applicationContext.xml中
在springmvc.xml中