博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring 基于注解的声明式事务注解配置和 aop xml配置优先级
阅读量:6846 次
发布时间:2019-06-26

本文共 1358 字,大约阅读时间需要 4 分钟。

hot3.png

一般来说,我们百度的时候, 配置 基于注解的声明式事务注解一般是

其实是没有错的,但是 这样是不全,很可能 会使 事务 没起效果的。

参考地址: http://blog.csdn.net/z_dendy/article/details/9446669由于采用的是SpringMVC、 MyBatis,故统一采用了标注来声明Service、Controller  由于服务器启动时的加载配置文件的顺序为web.xml---root-context.xml(Spring的配置文件)---servlet-context.xml(SpringMVC的配置文件),由于  root-context.xml配置文件中Controller会先进行扫描装配,但是此时service还没有进行事务增强处理,得到的将是原样的Service(没有经过事务加强处理,  故而没有事务处理能力),所以我们必须在root-context.xml中不扫描Controller,配置如下:        
在servlet-context.xml中扫描Controller同时不扫描Service,配置如下:

本人测试过了,,如果 扫描的时候 不 进行 对应的包扫描的配置,,, 注解事务,也是没有起到回滚的 作用的。 需要加上 包的扫描的配置的。

以上都加上了,那么有一个问题了。 如果 我们 使用 基于 xml 的 aop 的事务配置了 之后, 那么 又在 方法或者 类上 使用了 事务 注解, 那个优先级 更高 ? 我的测试结果是 : 事务注解的优先级更高 。 如果 由 于 自定义的AOP ,产生异常的时候,可能会 使 事务注解 没有 产生回滚,或者造成影响。 百度的结果是 : 配置 事务注解的 优先级,默认是 优先级最低的

注解用法: 用法

@Transactional 可以作用于接口、接口方法、类以及类方法上。当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。     虽然 @Transactional 注解可以作用于接口、接口方法、类以及类方法上,但是 Spring 建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。另外, @Transactional 注解应该只被应用到 public 方法上,这是由 Spring AOP 的本质决定的。如果你在 protected、private 或者默认可见性的方法上使用 @Transactional 注解,这将被忽略,也不会抛出任何异常。    默认情况下,只有来自外部的方法调用才会被AOP代理捕获,也就是,类内部方法调用本类内部的其他方法并不会引起事务行为,即使被调用方法使用@Transactional注解进行修饰。

转载于:https://my.oschina.net/u/2419285/blog/912797

你可能感兴趣的文章
【Unity】uLua热更新解决方案
查看>>
Go流程和函数
查看>>
mysql 实例下具体查看库,和表的大小
查看>>
老鸟谈生产场景删除文件及目录经验要领
查看>>
Redis原理介绍
查看>>
Linux网络管理及命令详解
查看>>
MVC -设计模式之王
查看>>
整理了一些Java软件工程师的基础知识点
查看>>
MyEclipse安装Thymeleaf插件
查看>>
java
查看>>
网络安全之CMD下的网络安全配置
查看>>
开源 java CMS - FreeCMS2.8 积分规则管理
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
warning C4273: ****.dll链接不一致
查看>>
汽车常识全面介绍 - 动力系统
查看>>
搞懂word-break、word-wrap、white-space
查看>>
七字箴言与六字箴言
查看>>
局域网下载控制好帮手--超级嗅探狗
查看>>
javabean的设计
查看>>