2019独角兽企业重金招聘Python工程师标准>>>

自己看了官方文档,也到网上查了下,目前理解如下:  
<context:component-scan/>和<mvc:annotation-driven/>:
<mvc:annotation-driven/>相当于注册了DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter两个bean,配置一些messageconverter。即解决了@Controller注解的使用前提配置。

<context:annotation-config/>是对包进行扫描,实现注释驱动Bean定义,同时将bean自动注入容器中使用。即解决了@Controller标识的类的bean的注入和使用。

一开始我在写配置的时候,只写了<context:component-scan/>,并没有使用<mvc:annotation-driven/>,servlet拦截*.do,.do请求可以被正确捕捉和处理。代码如下 
mvc-servlet.xml

Java代码  
  1. <context:component-scan base-package="com"></context:component-scan>

web.xml

Java代码  
  1. <servlet>
  2. <servlet-name>mvc</servlet-name>
  3. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  4. <load-on-startup>1</load-on-startup>
  5. </servlet>
  6. <servlet-mapping>
  7. <servlet-name>mvc</servlet-name>
  8. <url-pattern>*.do</url-pattern>
  9. </servlet-mapping>

后来为了解决静态资源访问的问题,servlet改成了拦截所有请求,即/,并添加了默认的servlet,这时候*.do请求不能被控制器捕捉了,页面错误为404。直到添加了<mvc:annotation-driven/>之后,.do请求才又能被正确捕捉和处理。代码如下 
mvc-servlet.xml

Java代码  
  1. <context:component-scan base-package="com"></context:component-scan>
  2. <mvc:annotation-driven/>
  3. <mvc:resources mapping="/styles/**" location="/WEB-INF/resource/styles/"/>
  4. <mvc:default-servlet-handler/>

web.xml

Java代码  
  1. <servlet>
  2. <servlet-name>mvc</servlet-name>
  3. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  4. <load-on-startup>1</load-on-startup>
  5. </servlet>
  6. <servlet-mapping>
  7. <servlet-name>mvc</servlet-name>
  8. <url-pattern>/</url-pattern>
  9. </servlet-mapping>

是什么原因造成这种区别的呢?为什么一开始没用<mvc:annotation-driven/>的时候可以,添加了默认servlet之后就不行了呢?

<context:annotation-config/>和<context:component-scan/>:

在基于主机方式配置Spring的配置文件中,你可能会见到<context:annotation-config/>这样一条配置,他的作用是式地向 Spring 容器注册

AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、

PersistenceAnnotationBeanPostProcessor 以及 RequiredAnnotationBeanPostProcessor 这 4 个BeanPostProcessor。

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

例如:

如果你想使用@Autowired注解,那么就必须事先在 Spring 容器中声明 AutowiredAnnotationBeanPostProcessor Bean。传统声明方式如下

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

如果想使用@ Resource 、@ PostConstruct、@ PreDestroy等注解就必须声明CommonAnnotationBeanPostProcessor

如果想使用@PersistenceContext注解,就必须声明PersistenceAnnotationBeanPostProcessor的Bean。

如果想使用 @Required的注解,就必须声明RequiredAnnotationBeanPostProcessor的Bean。同样,传统的声明方式如下:

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

一般来说,这些注解我们还是比较常用,尤其是Antowired的注解,在自动注入的时候更是经常使用,所以如果总是需要按照传统的方式一条一条配置显得有些繁琐和没有必要,于是spring给我们提供<context:annotation-config/>的简化配置方式,自动帮你完成声明。

不过,呵呵,我们使用注解一般都会配置扫描包路径选项

<context:component-scan base-package=”XX.XX”/>

该配置项其实也包含了自动注入上述processor的功能,因此当使用 <context:component-scan/> 后,就可以将 <context:annotation-config/> 移除了。

转载于:https://my.oschina.net/u/1012289/blog/129298

剖析context:component-scan/、mvc:annotation-dri...相关推荐

  1. context:component-scan/和mvc:annotation-driven/的区别

    http://www.iteye.com/problems/66133 <mvc:annotation-driven/>相当于注册了DefaultAnnotationHandlerMapp ...

  2. context:annotation-config/,mvc:annotation-driven/和context:component-scan之间的关系

    现在常用框架中SpringMVC.xml配置是: <mvc:annotation-driven/>和<context:component-scan> 那么<context ...

  3. context:annotation-config / 和context:component-

    为什么80%的码农都做不了架构师?>>>    1. <context:annotation-config /> 它的作用是隐式地向 Spring 容器注册   - Au ...

  4. Spring学习手册番外:context:annotation-config/ 和 mvc:annotation-driven / 的区别

    一.<context:annotation-config /> <context:annotation-config/> 的作用是向Spring容器注册以下四个BeanPost ...

  5. springboot 扫描jar包中bean_详解Spring Boot的Component Scan原理

    本文将帮助您了解Spring中最重要的概念 - 组件扫描.Spring Boot在组件扫描方面做了一些魔术 @ComponentScan 如果你了解组件扫描,你就会理解Spring.Spring是一个 ...

  6. 请教context:component-scan/和mvc:annotation-driven/的区别20

    http://www.iteye.com/problems/66133 FileSystemXmlApplicationContext 转载于:https://www.cnblogs.com/wuji ...

  7. Spring 一二事(8) - annotation 形式的 MVC

    1 <!-- 2 component:把一个类放入到spring容器中,该类就是一个component 3 在base-package指定的包及子包下扫描所有的类 4 --> 5 < ...

  8. Spring MVC 基础笔记

    spring mvc功能: 以Controller为中心完成对系统流程的控制管理 从请求中搜集数据 对传入的参数进行验证 将结果返回给视图 针对不同的视图提供不同的解决方案 针对jsp视图技术提供标签 ...

  9. Spring参考文档翻译12--IOC容器10

    1.10. Classpath Scanning and Managed Components 类路径扫描和托管组件 Most examples in this chapter use XML to ...

最新文章

  1. DL-5 深度学习框架的对比
  2. 微信小程序 遇到问题1
  3. Windows内存修改初篇
  4. ubuntu下 windows的zip文件打开,中文目录和文件名乱码
  5. 【OP放大器】在不拆开OP放大器的情况下查一查它是否坏掉或饱和。
  6. 面向对象编程的五大基本原则
  7. C++ 用libcurl库进行http 网络通讯编程
  8. npm aes 加密(js aes 加密)
  9. thymeleaf 消息推送_Springboot集成WebSocket+Thymeleaf+Echarts完成数据的实时推送
  10. android 电视 vob格式转换,vob格式转换器免费版|闪电vob格式转换器 v9.7.0 免费版 - 软件下载 - 绿茶软件园|33LC.com...
  11. python自动交易软件排名_量化投资软件排名 哪个量化交易软件最好用
  12. 经纬度十进制与度分秒换算及数据库实现
  13. 1160. 不容易系列之二
  14. html dom onblur,html的DOM中Event对象onblur事件用法实例
  15. 简述改变计算机桌面背景的方法,怎么设置和更改桌面背景
  16. 苹果笔记本 麦克风设置
  17. 找到一份满意的工作到底要花多少钱?
  18. windows防火墙
  19. PS修改支付宝余额截图
  20. 基于过滤器实现异常处理的探索

热门文章

  1. SAS 中计算总和或者计算总数的方法
  2. 学习进度 - 004
  3. [转] 深入浅出 妙用Javascript中apply、call、bind
  4. magento 报错及解决方法
  5. 为mongodb加上权限
  6. JAVA的静态变量、静态方法、静态类
  7. 用css自定义滚动条样式
  8. 抽象类和接口的关系之我的图解(转自Jack Fan)
  9. Python3爬虫之中文乱码问题分析与解决方法
  10. python3.6卸载教程_Python3.6安装卸载、执行命令、执行py文件的方法详解