spring mvc @Transaction注解不生效的解决

     spring的注解极大的方便了配置bean,将以前繁琐的工作简化,其中使用@Transaction注解进行事务管理更是方便,网上和各种书籍中讲解@Transaction注解使用方法的文章更是数不胜数,可是大都千篇一律,而且只是针对事务进行配置,而实际项目中,整个框架中各个功能模块要配合协作才行。这时就会发现@Transaction注解一旦和其他注解配合使用就会失效。

网上几乎找不到对此问题的解决方法,前几日做一个项目中遇到了此问题,百思不得其解,后来费了很大功夫才在一片文章中找到。

此问题出现的原因就同时使用了spring的自动注解扫描和@Transaction注解。

<context:component-scan />  

  这句配置使得spring自动扫描@Controller、@Service、@Components、@Required、@Autowired 通常@Transaction写在@Service的方法上,@Transactional要使用代理进行AOP处理,spring在一次性扫描时扫描到@service时,@Transactional的代理还没生成,所以@Transactional注解会失效,解决方法就是如此配置,在spring-mvc.xml中

<context:component-scan  use-default-filters="false">  
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>     
   </context:component-scan>

意思是只扫描@Controller注解

然后再application.xml中

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

意思是只扫描除了@Controller的所有注解


当spring解析到application.xml时,@Transactional已经生成了代理。此时在扫描@Service等注解后,@Transactional就会生效了。

在一般的书或者文章中@Transactional的使用与配置是很简单的,但是实际应用中与其他技术进行配合就会有冲突,对照书上发现自己写的一点不差,却就是不生效,最好还是能够深入框架源码才能找到问题。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值