AOP理解

为什么要去使用AOP?使用AOP有什么好处?

通过这几天对框架的学习,我觉得框架就是一群大佬开发出解决问题的简便方法。我感觉就像我们之前学习的解方程一样,这个方程不会解,直接给出你套公式就可以解决。那么AOP是用来解决什么问题的呢?

转账业务操作

看上述代码,就是我们平常写的一个业务逻辑操作,那么上面的代码有哪些问题呢?首先来看,它总共有四次与数据库的交互过程,建立了四次数据库的连接,也就意味着每一次与数据库的交互都是一次事务。再看红色箭头处,显然在这里会抛出一个除数不能为0的异常,那也就意味了之后的一次事务无法进行,假如在真实项目中这样写的话,那么就会出现转出账户的钱扣了,然后并没有转入到你要转入的账户。显然这里发生的重大BUG。那么如何解决呢?

这里最大的问题便在于每一个对持久层的操作都是一次独立的事务,假如我们可以把这些操作绑定到一次连接,那么如果出现异常的话,我们可以立即回滚事务,就可以避免上面所述的问题。然后又可以想到可以使用ThreadLocal对象把Connection和当前的线程绑定,就可以实现一个线程中只有一个能控制事务的对象。然后利用try...catch就可以达到回滚的目的,代码如下。

线程绑定连接
事务管理类
业务逻辑

在这里就达到了如果出现异常,那么事务就不会提交,而是回滚的目的,那么现在代码还有哪些问题呢?

之前的业务逻辑代码

对比一下,可以看出明显我们更向使用以前的代码去实现业务逻辑,让我们能够只关注业务本身,而且代码更加清晰。想一下,如果采用t每一个业务逻辑都采用try...catch的话,那么整个代码就是变得无比冗余且繁琐。那么我们如何在不修改原来的方法,还能实现业务的控制,也就是对原来方法的增强,在这里我们就可以想到使用代理对象的方法实现。

service代理对象

那么在这里算是既保证了事务的原子性,也解决了代码冗余的问题,那么到此算是引出了AOP的基本原理,AOP中文译名面向切面编程,在我现在的理解看来,就是将整个业务逻辑实现类看成一个切面,我们要做的就是对这个切面加以增强,在这个切面上找到切入点然后加以增强,在aop专业术语中称之通知,通知类型又有前置通知(植事务的开启),后置通知(事务正常结束后执行),异常通知(事务发成异常后执行),最终通知(释放连接)。基本原理就是这样的,然后AOP同样也分为俩种配置方式,基于XML的方式和基于注解方式的配置。当然spring有自己提供的事务管理 类以供使用,不需要自己创建。至于具体的实现方式,我想懂了这个原理,查看Spring Framework Documentation文档即可学会。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式...
    千淘萬漉阅读 10,580评论 3 9
  • 本章内容: 面向切面编程的基本原理 通过POJO创建切面 使用@AspectJ注解 为AspectJ切面注入依赖 ...
    谢随安阅读 8,469评论 0 9
  • 这篇博客覆盖的内容包括: AOP简史 AOP解决什么问题 使用PostSharp编写一个简单的切面 AOP是什么?...
    菠萝_gopher阅读 3,935评论 0 1
  • 前言 只有光头才能变强 上一篇已经讲解了Spring IOC知识点一网打尽!,这篇主要是讲解Spring的AOP模...
    Java3y阅读 11,781评论 8 181
  • springAop:面向切面的编程 应用场景:权限控制、事物管理、日志打印等等,就是在不同的方法中重复用到相同的代...
    HJJ_3c00阅读 2,844评论 0 0