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

  1. AutowiredAnnotationBeanPostProcessor
  2. CommonAnnotationBeanPostProcessor
  3. PersistenceAnnotationBeanPostProcessor
  4. RequiredAnnotationBeanPostProcessor

注册这4个BeanPostProcessor的作用,就是为了你的系统能够识别相应的注解。

  1. 如果想使用@ Resource 、@ PostConstruct、@ PreDestroy等注解就必须先声明CommonAnnotationBeanPostProcessor的Bean
  2. 如果想使用@PersistenceContext注解,就必须先声明PersistenceAnnotationBeanPostProcessor的Bean
  3. 如果想使用@Autowired注解,那么就必须先声明 AutowiredAnnotationBeanPostProcessor的Bean。
  4. 如果想使用 @Required的注解,就必须先声明RequiredAnnotationBeanPostProcessor的Bean。

传统的声明方式如下

<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor "/>

 

就一般而言,这些注解我们是经常使用,比如@Antowired,@Resuource等注解。
如果总是按照传统的方式一条一条的配置,感觉比较繁琐和机械。于是Spring给我们提供了<context:annotation-config/>的简化的配置方式,自动帮助你完成声明。
并且还自动搜索@Component , @Controller , @Service , @Repository等标注的类。

<context:component-scan/>

  1. <context:component-scan/> 还可以指定包的扫描路径;
  2. useDefaultFilters 属性,该属性默认值为 true,也就是说 spring 默认会自动发现被 @Component、@Repository、@Service 和 @Controller 标注的类,并注册进容器中。要达到只包含某些包的扫描效果,就必须将这个默认行为给禁用掉(在 @ComponentScan 中将 useDefaultFilters 设为 false 即可)
  3. 当使用 <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

posted @ 2022-02-24 21:37  CrazyJC  阅读(79)  评论(0编辑  收藏  举报