解决Spring和SpringMVC扫描注解类的冲突问题
原文地址:https://blog.csdn.net/xiaobao5214/article/details/52042041
最正确的配置方式:
在主容器中applicationContext.xml中,将Controller的注解排除掉
<context:component-scan base-package="com">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>
而在springmvc.xml中,将Service注解给去掉
<context:component-scan base-package="com">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />
</context:component-scan>
因为spring的context是父子容器,所以会产生冲突,由ServletContextListener产生的是父容器,springMVC产生的是子容器,子容器Controller进行扫描装配时装配了@Service注解的实例,而该实例理应由父容器进行初始化以保证事务的增强处理,所以此时得到的将是原样的Service(没有经过事务加强处理,故而没有事务处理能力。
还有一种方式是将service层改用xml配置,其实这样做也是变相的让springmvc无法扫描service,而只能依赖父窗口也就是ServletContextListener来进行初始化,这样同样被赋予了事务性。
也可以用直接扫描的方式:
直接扫描比较省事,但是事务回得不到处理,所以在具体的层面上还需要加入注解去声明事务,比如在dao层和service层加入@Transactional
-----------------------------------------------------------------------------------------------
几种不同配置的测试:
(1)只在applicationContext.xml中配置如下
<context:component-scan base-package="com" />
启动正常,但是任何请求都不会被拦截,简而言之就是@Controller失效,出现404错误
(2)只在springmvc.xml中配置
<context:component-scan base-package="com" />
启动正常,请求也正常,但是事物失效,也就是不能进行回滚
(3)在applicationContext.xml和springmvc.xml中都配置
<context:component-scan base-package="com" />
启动正常,请求正常,也是事物失效,不能进行回滚
(4)在applicationContext.xml中配置如下
<context:component-scan base-package="com.service" />
在springmvc.xml中配置如下
<context:component-scan base-package="com.action" />
或者按最正确的配置applicationContext.xml,将Controller的注解排除掉 ,springmvc.xml,将Service注解给去掉
此时启动正常,请求正常,事物也正常了。
解决Spring和SpringMVC扫描注解类的冲突问题的更多相关文章
- Spring 和 SpringMVC 常用注解和配置(@Autowired、@Resource、@Component、@Repository、@Service、@Controller的区别)
Spring 常用注解 总结内容 一.Spring部分 1.声明bean的注解 2.注入bean的注解 3.java配置类相关注解 4.切面(AOP)相关注解 5.事务注解 6.@Bean的属性支持 ...
- Spring MVC常用的注解类
一.注解类配置 要使用springmvc的注解类,需要在springmvc.xml配置文件中用context:component-scan/扫描:  二.五大重要的注解类 1.RequestMapp ...
- 记录一下SpringMVC扫描注解包的配置
最近做了一个小项目,使用Spring4+SpringMVC+Hibernate5 但是整合完毕了之后,在页面上请求添加记录的时候发现无法开启事务,报错的信息如下: org.springframewor ...
- 解决spring、springMVC重复扫描导致事务失效的问题
在主容器中(applicationContext.xml),将Controller的注解排除掉 1 2 3 而在springMVC配置文件中将Service注解给去掉 1 2 3 4 因为spring ...
- 【Spring】SpringMVC非注解配置的两种方式
目录结构: contents structure [+] SpringMVC是什么 Spring MVC的设计原理 SpringMVC配置的第一种方式 1,复制Jar包 2,Web.xml文件 3,M ...
- Spring自动扫描注解类的冲突问题
原文地址:http://www.blogjava.net/crazycy/archive/2014/07/12/415738.html Spring MVC项目中通常会有二个配置文件,spring-s ...
- springBoot注解大全JPA注解springMVC相关注解全局异常处理
https://www.cnblogs.com/tanwei81/p/6814022.html 一.注解(annotations)列表 @SpringBootApplication:包含了@Compo ...
- Spring细粒度控制扫描Bean
接Spring 依赖注入(DI)的注解 <context:component-scan base-package="" resource-pattern="**/* ...
- Spring和springmvc父子容器注解扫描问题详解
一.Spring容器和springmvc容器的关系如下图所示: Spring和springmvc和作为两个独立的容器,会把扫描到的注解对象分别放到两个不同的容器中, Springmvc容器是spr ...
随机推荐
- 用友UI层获取机构的方法
U层: UFIDA.U9.UI.PDHelper.PDContext.Current.OrgIDPDContext.Current.OrgRef.CodeColumn
- 基于.net EF6 MVC5+WEB Api 的Web系统框架总结(4)-Excel文件读、写操作
Excel文件读.写可以使用Office自带的库(Microsoft.Office.Interop.Excel),前提是本机须安装office才能运行,且不同的office版本之间可能会有兼容问题.还 ...
- 教你玩转Linux系统目录结构
Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的.Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POS ...
- Mac切换root用户
sudo su 然后输入密码,用户名显示sh-3.2#,这里的#代表的含义就是具有root权限 这时,再输入 su - 就可以进入root用户 那接下来,如果我们要切换至普通用户该怎么做? su - ...
- @Async源码探究
1. @Async源码探究 1.1. 上代码 @SpringBootApplication @EnableAsync public class SpringbootLearnApplication { ...
- K8S 上搭建 Redis
根据需求搭建一个不需要数据持久化,需要密码登录的 Redis mkdir /iba/qa_ibaboss_elk -p cd /iba/qa_ibaboss_elk # 创建一个专用的 namespa ...
- MySQL查询优化一例——也说说 Using intersect
生产上面有一条sql查询很慢,需要7到8秒左右,简化之后的sql如下所示: SELECT mingxi.* FROM ( SELECT btjc01.id, department.`name` AS ...
- 指针专题6-空指针NULL和void指针
1 NULL指针 一个指针变量可以指向计算机中任何一块内存,不管该内存有没有被分配,也不管该内存有没有使用权限,只要把地址给他,他就可以指向.C语言没有一种机制保证指向内存的正确性,程序员必须自己提高 ...
- PHP包管理工具composer
环境: centos7 一.linux上安装composer 前提:已安装了php 1. 下载composer安装包 php -r "copy('https://install.phpco ...
- TRACE32 Simulator License
链接:https://www.lauterbach.com/frames.html?sim_license.html Which Features of the TRACE32 Instruction ...