当前位置: 首页 > news >正文

Spring MVC配置文件的三个常用配置详解

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

  Spring MVC项目中通常会有二个配置文件,sprng-servlet.xml和applicationContext.xml二个配置文件,通常会出现以下几个配置

  1. <context:annotation-config />

  它的作用是隐式地向 Spring 容器注册  AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、PersistenceAnnotationBeanPostProcessor、RequiredAnnotationBeanPostProcessor 这4个BeanPostProcessor。其作用是如果你想在程序中使用注解,就必须先注册该注解对应的类,如下图所示:

依赖的类 注解
CommonAnnotationBeanPostProcessor @Resource 、@PostConstruct、@PreDestroy
PersistenceAnnotationBeanPostProcessor的Bean @PersistenceContext
AutowiredAnnotationBeanPostProcessor Bean @Autowired
RequiredAnnotationBeanPostProcessor @Required

  当然也可以自己进行注册:

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

  2. <context:component-scan base-package="com.*" >

     <context:component-scan/> 配置项不但启用了对类包进行扫描以实施注释驱动 Bean 定义的功能,同时还启用了注释驱动自动注入的功能(即还隐式地在内部注册了 AutowiredAnnotationBeanPostProcessor 和 CommonAnnotationBeanPostProcessor),因此当使用 <context:component-scan/> 后,就可以将 <context:annotation-config/> 移除了

     在这里有一个比较有意思的问题,就是扫描是否需要在二个配置文件都配置一遍,我做了这么几种测试:

            

  (1)只在applicationContext.xml中配置如下

<context:component-scan base-package="com.login" />

  启动正常,但是任何请求都不会被拦截,简而言之就是@Controller失效

  (2)只在spring-servlet.xml中配置上述配置

  启动正常,请求也正常,但是事物失效,也就是不能进行回滚

  (3)在applicationContext.xml和spring-servlet.xml中都配置上述信息

  启动正常,请求正常,也是事物失效,不能进行回滚

  (4)在applicationContext.xml中配置如下

<context:component-scan base-package="com.login" />

  在spring-servlet.xml中配置如下

<context:component-scan base-package="com.sohu.login.web" />

  此时启动正常,请求正常,事物也正常了。

  结论:在spring-servlet.xml中只需要扫描所有带@Controller注解的类,在applicationContext中可以扫描所有其他带有注解的类(也可以过滤掉带@Controller注解的类)。

  3. <mvc:annotation-driven />

  它会自动注册DefaultAnnotationHandlerMapping 与AnnotationMethodHandlerAdapter


转载自:行在途中

转载于:https://my.oschina.net/treenewbee/blog/489943

相关文章:

  • 什么是全栈呢(转)
  • MongoDB基于GridFS管理文件
  • js eval()方法处理json字符串
  • 邮件原理你真的造吗
  • hdu 4841 圆桌问题(STL vector)
  • WPF获取窗口句柄
  • PHP面向对象static和const的两段代码示例
  • 安卓飞机大战(二) SurfaceView实现自制背景
  • PHP基础知识
  • JLOI 2013 卡牌游戏
  • Andriod下载源码导入后AndroidManifest.xml小红叉的解决办法
  • IE浏览器下ajax缓存导致数据不更新的解决方法
  • coredata
  • 一个java实现的简单的4则运算器
  • Opengl中矩阵和perspective/ortho的相互转换
  • 2017届校招提前批面试回顾
  • Docker 笔记(2):Dockerfile
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • Intervention/image 图片处理扩展包的安装和使用
  • opencv python Meanshift 和 Camshift
  • socket.io+express实现聊天室的思考(三)
  • underscore源码剖析之整体架构
  • 创建一种深思熟虑的文化
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 微信公众号开发小记——5.python微信红包
  • 我从编程教室毕业
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • #pragma pack(1)
  • (1)(1.11) SiK Radio v2(一)
  • (2015)JS ES6 必知的十个 特性
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (动态规划)5. 最长回文子串 java解决
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • .bat文件调用java类的main方法
  • .java 9 找不到符号_java找不到符号
  • .NET CORE Aws S3 使用
  • .net 生成二级域名
  • /bin、/sbin、/usr/bin、/usr/sbin
  • /proc/stat文件详解(翻译)
  • ::before和::after 常见的用法
  • ::前边啥也没有
  • ;号自动换行
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • @SuppressLint(NewApi)和@TargetApi()的区别
  • [ C++ ] STL_list 使用及其模拟实现
  • [ C++ ] STL---string类的模拟实现
  • [1]-基于图搜索的路径规划基础
  • [2016.7 test.5] T1
  • [C++]高精度 bign (重载运算符版本)
  • [CERC2017]Cumulative Code
  • [CF543A]/[CF544C]Writing Code
  • [excel与dict] python 读取excel内容并放入字典、将字典内容写入 excel文件