Spring+SpringMVC 配置事务管理无效原因及解决方案。
一般我们在Spring的配置文件application.xml中对Service层代码配置事务管理,可以对Service的方法进行AOP增强或事务处理如事务回滚,但是遇到一个问题,在Controller类中调用Service层方法,配置的事务管理会失效,查询相关资料发现原因。其实Spring和SpringMVC俩个容器为父子关系,Spring为父容器,而SpringMVC为子容器。也就是说application.xml中应该负责扫描除@Controller的注解如@Service,而SpringMVC的配置文件应该只负责扫描@Controller,否则会产生重复扫描导致Spring容器中配置的事务失效。
因此正确的配置方式应该为:
Spring的配置文件:application.xml
<context:component-scan base-package="org.bc.redis" use-default-filters="true">
<!-- 排除含@Controller注解的类 -->
<context:exclude-filter type="annotation" expression="org.bc.redis.controller.UserController"/>
</context:component-scan>
或者
<!-- 指定扫描的包,避开包含@Controller注解的包 -->
<context:component-scan base-package="org.bc.redis.service" use-default-filters="true">
</context:component-scan>
SpringMVC的配置文件:springmvc.xml
<!-- 只扫描含@Controller注解的包,避免重复扫描 -->
<context:component-scan base-package="org.bc.redis.controller" use-default-filters="true">
</context:component-scan>
最后
经过测试,其实问题主要在于SpringMVC的配置文件扫包范围,Spring的配置文件就算也扫了@Controller注解,但是在SpringMVC会重新扫描一次,事务管理的Service只要没被重新扫描就不会出现事务失效问题。
相关文章
- Spring学习笔记(九)——SpringMVC实现文件上传
- SpringMVC之响应数据和结果视图
- 超详细讲解SpringMVC三层架构
- SpringMVC常用操作
- SpringMVC学习笔记
- SpringMvc+Spring+MyBatis+Maven+Ajax+Json注解开发
- SpringMVC之@RequestParam 中文乱码问题解决
- 10-SpringMVC简介及组件解析
- springmvc笔记_SpringMVC优点
- SpringMVC获取请求参数
- SpringMVC:注解配置SpringMVC
- SpringMVC(七):SpringMVC的响应处理
- 理论:第五章:Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的
- 一个SpringMVC接口能返回JSON又能返回XML? 安排!
- 浅谈SpringMVC后端与前端Ajax的五种交互方法详解程序员
- spring的AOP(五)—-Spring AOP 编程(AspectJ )详解编程语言
- springmvc上传文件BadRequest异常详解编程语言
- SpringMVC防止XSS注入详解编程语言
- Spring Boot(二十):使用spring-boot-admin对spring-boot服务进行监控详解编程语言
- Spring Boot(十四):spring boot整合shiro-登录认证和权限管理详解编程语言
- SpringMVC+Spring+Mybatis框架集成详解编程语言
- SSM框架整合( Spring 、 SpringMVC 和 Mybatis )详解编程语言
- Maven搭建SSM(SpringMVC+Spring+MyBatis)框架入门教程(超级详细)
- Spring Boot 2.x :通过 spring-boot-starter-hbase 集成 HBase
- Spring框架致力于搭建基于MSSQL的稳健开发体系(spring mssql)