• 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种常见通知(有误、待修改)

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

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

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

     

    常见的执行流程:

    • 执行前置通知(前增强)
    • 执行目标方法,并用一个变量保存目标方法的返回值
    • 执行后置通知(后增强)
    • 返回目标方法的返回值
    • 执行返回通知
  • 相关阅读:
    Oracle 删除表中的一整列
    如何查看数据库中表的创建时间
    Oracle数据库的简单数据恢复
    分治和动态规划
    深入浅出 妙用Javascript中apply、call、bind
    CSS3 Background-size
    WampServer 2.5设置外网访问/局域网手机访问(403 Forbidden错误解决方法)
    js中apply方法的使用
    Leetcode No.1 Two Sum
    Python的sys.argv使用说明
  • 原文地址:https://www.cnblogs.com/chy18883701161/p/11135435.html
Copyright © 2020-2023  润新知