spring aop的实现方式(一)

来源:互联网 发布:电影 知乎 编辑:程序博客网 时间:2024/05/24 05:26

spring aop是一种面向切面的编程思想,我们知道AOP的应用场景,例如事务处理、日志、缓存等,但是很多人对AOP的原理并不是很了解。这里我们讲述一下为什么使用AOP和怎么使用AOP的简单使用。

  • AOP定义
    面向切面编程是对程序OOP编程的另一种补充。OO将应用程序分解为对象层次,而AOP则将程序分解为各个方面或者关系。这就使得模块之间的关联能够跨多个对象进行处理。

  • AOP的出现
    我们先看看我们的案例,事务处理、日志、缓存,我们看看事务是如何使用AOP的。

    1. 事务处理

      事务处理,我们在操作数据库的时候需要进行try–catch,如果有异常则需要我们的事务进行会滚操作,但是我们无需知道数据库做了什么操作,我们只要知道是否发生了异常,如若发生异常,则回滚,如图:

      Created with Raphaël 2.1.0开始新增保存点数据库操作发生异常?回滚到保存点提交事务yesno

      我们从图中可以看出,整个控制流程的关键在于是否发生异常,如果发生异常的话直接回滚,否则提交事务,也就是说我们无需关注数据库做了什么,我们只要在开始的时候savepoint,最后判断是否发生异常,如果异常了callback ,否则就commit。 每次都要做重复的savepoint,然后callback 、commit,所以我们使用AOP来简化工作。

    2. 日志处理

      日志处理,我们在日常系统操作中,往往需要记录一些操作日志,来判断用户的使用情况,是否使用正确。记录用户、IP、使用情况等。需要我们使用日志来单独处理,这里使用我们AOP的思想也很简单,我们在用户操作之前和用户操作之后记录日志。


      这里有人会问了,我直接在方法之前写一个记录函数,操作完成之后也写一个记录函数就可以了呀?答案是没错,你完全实现了效果,那如果我需要在我这上百个函数中都需要加入这样的函数,那你还会这么去做么?写太多了,我们就又要重构了.我们重构的目的就是不让同样的工作去重复工作,这就是重构。

      Created with Raphaël 2.1.0开始记录开始日志业务操作记录结束日志结束

      从图中我们可以看到,我们不用关心业务做什么,我们只要把log记录就可以了,这里跟事务处理一样的处理方式,只要把开头和结尾处理好就可以了。

0 0