微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

了解Spring AOP和事务方面

如何解决了解Spring AOP和事务方面

我正在研究当我们自动连接任何接口时春天给出的代理对象。这是理解https://www.youtube.com/watch?v=bEvGdWjeCy4&t=310s的很好的链接。他在这里解释说,如果POJO实现了任何接口,那么Spring proxy bean也将实现该接口(使用JDK代理机制)并添加其他逻辑,例如事务逻辑(如果该方法是使用jdbc代码注释或委托给PlatformTransactionManager)。 Spring为我们提供了一个包装器对象,该包装器对象具有对真实对象的引用,并且具有在使用MethodInvocationHandler调用原始方法之前和之后运行的其他代码。所以我的问题是spring如何正确地管理该事务。在哪里编写用于连接和启动事务的jdbc代码。是在Spring Proxy对象还是任何Aspect类中。

AOP中的各个方面基本上是跨领域的关注点,例如整个应用程序共有的事务。 Spring是在Proxy对象中插入Transaction行为代码,还是使用PlatformTransactionManager做到这一点,并且此AOP在此流程中的适用位置。如果是的话,方面如何处理事务性行为。呼叫如何转移到它?

解决方法

就JDK代理而言,创建代理对象时必须提供InvocationHandler实现。调用代理对象时,将InvocationHandler围绕实际对象调用。 (有关JDK代理如何工作的世界示例,请参见this

就春季交易而言,它已经附带了InvocationHandler实现(即JdkDynamicAopProxy)。然后它将以某种方式调用事务方面(即TransactionInterceptor)。事务方面负责控制整个工作流程,例如何时创建,提交或回滚事务以及何时实际执行实际方法等。

事务方面也委托PlatformTransactionManager来实际启动,提交和回滚事务。由于不同的技术有各自的启动,提交和回滚事务的方式,因此有必要引入PlatformTransactionManager作为抽象这些操作的接口,以便我们可以通过在内部简单地切换PlatformTransactionManager实现来切换不同的事务技术。交易方面。

回到您的问题:

获取连接并启动事务的jdbc代码在哪里 书面。是在Spring Proxy对象还是任何Aspect类中。

没有一个。实际上,PlatformTransactionManager是获得连接并启动由方面所调用的事务的方法。

Spring是在代理对象中插入事务行为代码还是 它是使用PlatformTransactionManager来执行的吗? AOP适合此流程。

Spring将事务行为插入方面对象(即TransactionInterceptor)中。然后,这些方面将委托给PlatformTransactionManager来真正开始,提交和回滚事务。

此处如何调用Aspect处理事务行为 如果是。呼叫如何转移到它?

假设使用了JDK代理,则调用流程类似于:

  1. 有人在JDK代理上调用
  2. 此代理的
  3. InvocationHandler将被调用(即JdkDynamicAopProxy
  4. InvocationHandler以某种方式称为春季交易方面(即TransactionInterceptor
  5. 事务方面委派给PlatformTransactionManager,以便在必要时实际启动,提交和回滚事务。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。