AOP简介

AOP全称Aspect-Oriented  Programming,即面向切面编程,是面向对象编程(OOP)的一种补充。

 

在通常的业务处理中,都会进行事务处理、日志记录等操作,比如:

class  User{
    public void addUser(){
        ......  //添加用户
        ....... //记录一条日志:xxx时间添加xxx用户,操作者:xxx,操作结果:xxx
    }

    public  void  alterUser(){
        .......  //修改用户
        ........//记录一条日志:xxx时间修改xxx用户,操作者:xxx,操作结果:xxx
    }

    public void  deleteUser(){
        .......//删除用户
        .......//记录一条日志:xxx时间删除xxx用户,操作者:xxx,操作结果:xxx
}

 

这是一个操作用户的类,是对用户的抽象,日志操作和用户操作其实没有半毛钱关系,上面的抽象并不好,把用户操作和日志操作杂糅在一起,应该把日志操作分离出去,这样才符合OOP的编程思想。

而且后期不好维护、升级,比如后面要修改日志操作,你找到User类,在addUser()中一部分是用户操作,一部分是日志操作,你要先找到哪些是日志操作,然后改。后面的方法也是如此,很繁琐。

 

AOP解决了此问题。AOP是一种新的编程思想,是OOP的一种补充。OOP专心负责核心业务,AOP负责其它杂七杂八的业务。

OOP好比是经理,AOP好比是助理。原先所有事儿,什么批文件、见客户、通知下级来开会、向下级传达指示,所有事儿都是自己做,很繁琐,搞得精疲力竭,还容易出问题。

现在招了助理AOP,总经理OOP可以专心处理核心的业务,批示下文件、见见客户就行了。传递指示、通知下级开会,这些事儿助理AOP来做。分工明确,效率

高很多。

 

 这些操作可以被多个类使用,叫做切面(Aspect)。

 

 


 

 

实现AOP的3种方式

  • 自己写代理来增强原来的类    十分麻烦
  • 使用Spring  AOP      简单,但需要在xml中写大量的配置
  • 使用AspectJ      AspectJ是一个专业的AOP框架,十分强大

最常用的方式是由Spring整合AspectJ。(AspectJ一般不单用)

 

 


 

 

Spring致力于一站式开发方案,给多个方面都提供了实现,比如提供了JdbcTemplate来操作数据库,提供了Spring  AOP来实现AOP。 

Spring功能太杂,不够专业。

操作数据库,JdbcTemplate哪有持久层框架mybatis专业;实现aop,Spring AOP哪有AspectJ专业。

一般把Spring作为容器(管理Bean),其它方面由专业框架来实现,Spring把它们整合进来。

 

 


 

 

AOP的5种常见通知(有误、待修改)

 

通知类型           增强时间       常见应用
前置通知 在目标方法执行前进行一些处理 权限管理
后置通知 在目标方法执行后进行一些处理 关闭流、上传文件、删除临时文件
返回通知 在返回目标方法的返回值后进行一些处理  
异常通知 在方法抛出异常后进行一些处理 处理异常、记录异常
环绕通知

命名思议,环绕在目标方法的整个生命周期,即作用于目标方法的整个调用流程,

可实现前增强、后增强、异常处理等功能。

 

 

常见的执行流程:

  • 执行前置通知(前增强)
  • 执行目标方法,并用一个变量保存目标方法的返回值
  • 执行后置通知(后增强)
  • 返回目标方法的返回值
  • 执行返回通知

 

posted @ 2019-07-04 22:55  chy_18883701161  阅读(488)  评论(0编辑  收藏  举报