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

看上述代码,就是我们平常写的一个业务逻辑操作,那么上面的代码有哪些问题呢?首先来看,它总共有四次与数据库的交互过程,建立了四次数据库的连接,也就意味着每一次与数据库的交互都是一次事务。再看红色箭头处,显然在这里会抛出一个除数不能为0的异常,那也就意味了之后的一次事务无法进行,假如在真实项目中这样写的话,那么就会出现转出账户的钱扣了,然后并没有转入到你要转入的账户。显然这里发生的重大BUG。那么如何解决呢?
这里最大的问题便在于每一个对持久层的操作都是一次独立的事务,假如我们可以把这些操作绑定到一次连接,那么如果出现异常的话,我们可以立即回滚事务,就可以避免上面所述的问题。然后又可以想到可以使用ThreadLocal对象把Connection和当前的线程绑定,就可以实现一个线程中只有一个能控制事务的对象。然后利用try...catch就可以达到回滚的目的,代码如下。



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

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

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