在使用SpringMVC的时候,配置文件中我们经常看到 annotation-driven 这样的注解,其含义就是支持注解,一般根据前缀 tx、mvc 等也能很直白的理解出来分别的作用。<tx:annotation-driven/> 就是支持事务注解的(@Transactional) 、<mvc:annotation-driven> 就是支持mvc注解的,说白了就是使Controller中可以使用MVC的各种注解。

首先,<tx:annotation-driven/> 会有一个属性来指定使用哪个事务管理器,如:<tx:annotation-driven transaction-manager="transactionManager" />。然后事务管理器 transactionManager 会引用 dataSource (如果我们使用JPA或hibernate,也需要指定一个 entityManagerFactory),dataSouce 肯定就是直接对数据库的了。
这样逐层引用下去,所以我们使用@Transactionl 注解可以控制事务就通俗易懂了。另外要提一下的就是Spring是使用AOP通过asm操作Java字节码的方式来实现对方法的前后事务管理的。

说到这里,已经有了对 <tx:annotation-driven/> 的简单理解,那我们是否就可以在程序中所有被spring管理的类上都可以使用@Transactional注解了呢,在Service上可以使用@Transactional 注解这个是肯定的了,那总有些人也想弄明白能否在Controller 使用?答案显然是“不一定”的(与应用上下文配置有关),下面做下解释:
在 spring-framework-reference.pdf 文档上有这样一段话:
<tx:annotation-driven/> only looks for @Transactional on beans in the same application context it is defined in. This means that, if you put <tx:annotation-driven/> in a WebApplicationContext for a DispatcherServlet, it only checks for @Transactional beans in your controllers, and not your services.
意思就是:<tx:annoation-driven/>只会查找和它在相同的应用上下文件中定义的bean上面的@Transactional注解,如果你把它放在Dispatcher的应用上下文中,它只检查控制器(Controller)上的@Transactional注解,而不是你services上的@Transactional注解。

所以,可以确定的是我们是可以在Controller上使用事务注解的,但是我们不推荐这样做(本人也从来没有这样做过),这里只是为了说明spring对<tx:annotation-driven/>的使用。

转载于:https://www.cnblogs.com/atai/p/6868642.html

[转]Spring事务tx:annotation-driven/相关推荐

  1. 关于Spring事务tx:annotation-driven/的理解(Controller可以使用@Transactional)

    在使用SpringMvc的时候,配置文件中我们经常看到 annotation-driven 这样的注解,其含义就是支持注解,一般根据前缀 tx.mvc 等也能很直白的理解出来分别的作用.<tx: ...

  2. Spring 事务源码(2)—<tx:annotation-driven/>事务标签源码解析

      基于最新Spring 5.x,详细介绍了Spring 事务源码,包括< tx:annotation-driven/>标签源码解析.   此前我们已经学习了Spring的<tx:a ...

  3. Spring事务管理-》Spring事务管理(annotation)

    5.6 使用@Transactional 除了使用XML类型的事务管理,同时Spring也提供了Annotation类型的事务管理.如下所示: 一:Spring事务管理 =============== ...

  4. Spring→事务、隔离级别、事务传播行为、编程式事务控制、XML配置声明式事务(原始方式)、XML配置声明式事务(基于tx/aop)、@注解配置声明式事务、优势总结

    事务 Spring事务管理 不考虑隔离引发问题 隔离级别 事务传播行为 演示环境搭建 编程式事务控制 XML配置声明式事务(原始方式) XML配置声明式事务(基于tx/aop) @注解配置声明式事务 ...

  5. Spring事务管理 与 SpringAOP

    1,Spring事务的核心接口 Spring事务管理的实现有许多细节,如果对整个接口框架有个大体了解会非常有利于我们理解事务,下面通过讲解Spring的事务接口来了解Spring实现事务的具体策略.  ...

  6. Spring事务配置探究

    2019独角兽企业重金招聘Python工程师标准>>> 一.项目中spring+mybaits xml配置解析 一般我们会在datasource.xml中进行如下配置,但是其中每个配 ...

  7. 【面试】我是如何在面试别人Spring事务时“套路”对方的

    作者:李新杰,来自:编程新说 "中国最好面试官" 自从上次写了一篇"[面试]我是如何面试别人List相关知识的,深度有点长文"的文章后,有读者专门加我微信,说我 ...

  8. SSH深度历险(六) 深入浅出----- Spring事务配置的五种方式

    这对时间在学习SSH中Spring架构,Spring的事务配置做了具体总结.在此之间对Spring的事务配置仅仅是停留在听说的阶段,总结一下.总体把控.通过这次的学习发觉Spring的事务配置仅仅要把 ...

  9. Spring 事务管理高级应用难点剖析

    Spring 事务管理高级应用难点剖析: 第 1 部分 http://www.ibm.com/developerworks/cn/java/j-lo-spring-ts1/index.html htt ...

最新文章

  1. 基于ARM Cortex-M的SoC存储体系结构和实战
  2. pytorch实现连续切片,类似于tf.strided_slice()
  3. C#中Ref和out的使用区别
  4. scss怎么引入到html,Sass 导入指令
  5. qr码生成_从Java程序生成QR码图像
  6. F-Secure Client Security 注册机
  7. MySQL 排序、分页查询、聚合查询
  8. 10a 16a 插座区别_电动汽车小知识(NO·5):电动汽车能否用家里的插座进行充电?...
  9. Window+Java环境证书生成说明,pfx证书已经生成
  10. 分享 | 开源的中文语音识别系统
  11. 路由器常见问题及解决办法
  12. C# 实现自定义的USB设备与上位机进行通信(上位机部分)
  13. SQL文件示例(Mysql)
  14. 一起寻找哪些免费小巧的 CAD文件查看和格式转换软件
  15. 安国主控au6983、au698x fc8708 量产失败修复过程。载入韧体数据失败\坏磁区过多\读坏块表错误...
  16. libtorrent源码分析(三)BT下载相关知识总结
  17. Python实现Excel表格数据去重
  18. 土木工程计算机设计考试科目一模拟试题,科目一电脑模拟考试,原来这么简单,看完这个科一不用愁!...
  19. Python Flask 学习笔记 —— 二(路由,视图函数,jinjia2语法)
  20. Python机器学习个人总结

热门文章

  1. 【2019牛客暑期多校训练营(第二场) - D】Kth Minimum Clique(bfs,tricks)
  2. 【2050 Programming Competition - 2050 一万人码 】非官方部分题解(HDU)
  3. 【Kattis - triangle 】Sierpiński Circumference(数学,求位数,取对数或Java)
  4. 函授本科统考计算机考试时间,函授2006级计算机、机电本科第一学期考试时间安排.doc...
  5. csm和uefi_关于CSM和UEFI你要知道的一些事
  6. java中jframe不存在怎么办,java – 设置JFrame背景,为什么这不起作用?
  7. h5 网站滚动到某个位置
  8. 对数函数定义域和值域为r_对数函数
  9. java屏蔽编译告警_java-禁止JAXB生成的类上的编译器警告
  10. go语言快速刷《程序员面试金典》(1)