context:annotation-config和mvc:annotation-driven
Spring家族的配置中这两个配置的意义,说具体点其实根据标签的shecma就能看出来,mvc,主要就是为了Spring MVC来用的,提供Controller请求转发,json自动转换等功能,而context这个主要是解决spring容器的一些注解。
从百度参考了两个帖子:
http://blog.csdn.net/sxbjffsg163/article/details/9955511
http://blog.sina.com.cn/s/blog_872758480100wtfh.html
<context:annotation-config>
使用这个标签是向Spring容器中注册以下4个BeanPostProcessor
- AutowiredAnnotationBeanPostProcessor
- CommonAnnotationBeanPostProcessor
- PersistenceAnnotationBeanPostProcessor
- RequiredAnnotationBeanPostProcessor
注册这4个BeanPostProcessor的作用,就是为了你的系统能够识别相应的注解。
- 如果想使用@ Resource 、@ PostConstruct、@ PreDestroy等注解就必须先声明CommonAnnotationBeanPostProcessor的Bean
- 如果想使用@PersistenceContext注解,就必须先声明PersistenceAnnotationBeanPostProcessor的Bean
- 如果想使用@Autowired注解,那么就必须先声明 AutowiredAnnotationBeanPostProcessor的Bean。
- 如果想使用 @Required的注解,就必须先声明RequiredAnnotationBeanPostProcessor的Bean。
传统的声明方式如下
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor "/>
就一般而言,这些注解我们是经常使用,比如@Antowired,@Resuource等注解。
如果总是按照传统的方式一条一条的配置,感觉比较繁琐和机械。于是Spring给我们提供了<context:annotation-config/>的简化的配置方式,自动帮助你完成声明。
并且还自动搜索@Component , @Controller , @Service , @Repository等标注的类。
<context:component-scan/>
- <context:component-scan/> 还可以指定包的扫描路径;
- useDefaultFilters 属性,该属性默认值为 true,也就是说 spring 默认会自动发现被 @Component、@Repository、@Service 和 @Controller 标注的类,并注册进容器中。要达到只包含某些包的扫描效果,就必须将这个默认行为给禁用掉(在 @ComponentScan 中将 useDefaultFilters 设为 false 即可)
- 当使用 <context:component-scan/> 后,就可以将 <context:annotation-config/> 移除了。
<!-- dispatcher-servlet只扫描controller不扫描其他bean --> <context:component-scan base-package="com.vivo.finance.loan" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan>
<mvc:annotation-driven/>
<mvc:annotation-driven /> 是一种简写形式,完全可以手动配置替代这种简写形式,简写形式可以让初学都快速应用默认配置方案。
当配置了mvc:annotation-driven/后,Spring就知道了我们启用注解驱动,然后Spring会自动为我们注册下面的这几个Bean到工厂中,来处理我们的请求。
RequestMappingHandlerMapping:它是HandlerMapping的实现类,会处理@RequestMapping 注解,并将其注册到请求映射表中。
RequestMappingHandlerAdapter:它是HandlerAdapter的实现类,是处理请求的适配器,说白了,就是确定调用哪个类的哪个方法,并且构造方法参数,返回值。
是spring MVC为@Controllers分发请求所必须的。
并提供了:数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持,读写XML的支持(JAXB),读写JSON的支持(Jackson)。
后面,我们处理响应ajax请求时,就使用到了对json的支持。
后面,对action写JUnit单元测试时,要从spring IOC容器中取DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,来完成测试,取的时候要知道是<mvc:annotation-driven />这一句注册的这两个bean。
参考:https://www.jianshu.com/p/ce5d7948de5d
https://www.cnblogs.com/dreamroute/p/4493346.html