剖析context:component-scan/、mvc:annotation-dri...
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
- <context:component-scan base-package="com"></context:component-scan>
web.xml
- <servlet>
- <servlet-name>mvc</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>mvc</servlet-name>
- <url-pattern>*.do</url-pattern>
- </servlet-mapping>
后来为了解决静态资源访问的问题,servlet改成了拦截所有请求,即/,并添加了默认的servlet,这时候*.do请求不能被控制器捕捉了,页面错误为404。直到添加了<mvc:annotation-driven/>之后,.do请求才又能被正确捕捉和处理。代码如下
mvc-servlet.xml
- <context:component-scan base-package="com"></context:component-scan>
- <mvc:annotation-driven/>
- <mvc:resources mapping="/styles/**" location="/WEB-INF/resource/styles/"/>
- <mvc:default-servlet-handler/>
web.xml
- <servlet>
- <servlet-name>mvc</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>mvc</servlet-name>
- <url-pattern>/</url-pattern>
- </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...相关推荐
- context:component-scan/和mvc:annotation-driven/的区别
http://www.iteye.com/problems/66133 <mvc:annotation-driven/>相当于注册了DefaultAnnotationHandlerMapp ...
- context:annotation-config/,mvc:annotation-driven/和context:component-scan之间的关系
现在常用框架中SpringMVC.xml配置是: <mvc:annotation-driven/>和<context:component-scan> 那么<context ...
- context:annotation-config / 和context:component-
为什么80%的码农都做不了架构师?>>> 1. <context:annotation-config /> 它的作用是隐式地向 Spring 容器注册 - Au ...
- Spring学习手册番外:context:annotation-config/ 和 mvc:annotation-driven / 的区别
一.<context:annotation-config /> <context:annotation-config/> 的作用是向Spring容器注册以下四个BeanPost ...
- springboot 扫描jar包中bean_详解Spring Boot的Component Scan原理
本文将帮助您了解Spring中最重要的概念 - 组件扫描.Spring Boot在组件扫描方面做了一些魔术 @ComponentScan 如果你了解组件扫描,你就会理解Spring.Spring是一个 ...
- 请教context:component-scan/和mvc:annotation-driven/的区别20
http://www.iteye.com/problems/66133 FileSystemXmlApplicationContext 转载于:https://www.cnblogs.com/wuji ...
- Spring 一二事(8) - annotation 形式的 MVC
1 <!-- 2 component:把一个类放入到spring容器中,该类就是一个component 3 在base-package指定的包及子包下扫描所有的类 4 --> 5 < ...
- Spring MVC 基础笔记
spring mvc功能: 以Controller为中心完成对系统流程的控制管理 从请求中搜集数据 对传入的参数进行验证 将结果返回给视图 针对不同的视图提供不同的解决方案 针对jsp视图技术提供标签 ...
- Spring参考文档翻译12--IOC容器10
1.10. Classpath Scanning and Managed Components 类路径扫描和托管组件 Most examples in this chapter use XML to ...
最新文章
- DL-5 深度学习框架的对比
- 微信小程序 遇到问题1
- Windows内存修改初篇
- ubuntu下 windows的zip文件打开,中文目录和文件名乱码
- 【OP放大器】在不拆开OP放大器的情况下查一查它是否坏掉或饱和。
- 面向对象编程的五大基本原则
- C++ 用libcurl库进行http 网络通讯编程
- npm aes 加密(js aes 加密)
- thymeleaf 消息推送_Springboot集成WebSocket+Thymeleaf+Echarts完成数据的实时推送
- android 电视 vob格式转换,vob格式转换器免费版|闪电vob格式转换器 v9.7.0 免费版 - 软件下载 - 绿茶软件园|33LC.com...
- python自动交易软件排名_量化投资软件排名 哪个量化交易软件最好用
- 经纬度十进制与度分秒换算及数据库实现
- 1160. 不容易系列之二
- html dom onblur,html的DOM中Event对象onblur事件用法实例
- 简述改变计算机桌面背景的方法,怎么设置和更改桌面背景
- 苹果笔记本 麦克风设置
- 找到一份满意的工作到底要花多少钱?
- windows防火墙
- PS修改支付宝余额截图
- 基于过滤器实现异常处理的探索