spring+springmvc声明式事务失效

菜鸟笔记:如有不对的地方,欢迎大家指正,谢谢!

spring+springmvc事务失效,一般都是因为注解的重复扫描导致。
spring的context是父子容器,所以会产生冲突,由ServletContextListener产生的是父容器,springMVC产生的是子容器,子容器Controller进行扫描装配时装配了@Service注解的实例,而该实例理应由父容器进行初始化以保证事务的增强处理,所以此时得到的将是原样的Service(没有经过事务加强处理,故而没有事务处理能力。)

简单的说,应用了事务的service注解实例,本来是要被spring扫描装配来保证事务,但是却被springmvc扫描装配了,这就导致了事务的失效。

解决办法就是,springmvc只扫描装配controller注解的实例,其它的注解实例交给spring来处理。

具体实现如下:

spring.xml主要负责一些事务逻辑的扫描,使用context:exclude-filter过滤掉controller,需要注意:这个包名不需要精确。

<span style="color:#000099;">context:exclude-filter意思是:不扫描<span style="font-family: Arial, Helvetica, sans-serif;">expression="org.springframework.stereotype.Controller"中指定的注解,其它的都扫描。</span></span>

<context:component-scan base-package="com.travelsky>
	<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

 

springmvc的xml中只对controller的扫描,使用<context:include-filter 来限制扫描的时候,需要注意:包名必须精确,否则 <context:include-filter限制失效

<span style="color:#000099;">context:include-filter意思是:只扫描</span><span style="font-family: Arial, Helvetica, sans-serif;"><span style="color:#000099;">expression="org.springframework.stereotype.Controller"中指定的注解。</span></span>

<span style="font-family:Arial, Helvetica, sans-serif;color:#000099;">
</span><span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="java"><context:component-scan base-package="com.test.controller>
	<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

 


事务失效,首先查看项目配置文件的启动顺序,查看是否是注解的重复扫描导致的;其次在查看事务的切入点和事务配置的方法是否有问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值