• Spring-AOP总结


    AOP总结

    • 概念: AOP(Aspect Oriented Programming )面向切面编程,- -种编程范式
    • 作用:在不惊动原始设计的基础上为方法进行功能增强
    • 核心概念
      • 代理 ( Proxy ) : SpringAOP的核心本质是采用代理模式实现的
      • 连接点( JoinPoint ) :在SpringAOP中 ,理解为任意方法的执行
      • 切入点( Pointcut ) :匹配连接点的式子,也是具有共性功能的方法描述
      • 通知( Advice ) : 若干个方法的共性功能,在切入点处执行,最终体现为一个方法
      • 切面( Aspect ) : 描述通知与切入点的对应关系
      • 目标对象( Target ) : 被代理的原始对象成为目标对象
         

    AOP切入点表达式

    切入点:要进行增强的方法

    切入点表达式:要进行增强的方法的描述方式

    execution(void com.hyk.dao.BookDao.update())

    描述方式一:执行com.hyk.dao包下的BookDao接口中的无参数update方法

    execution(void com.hyk.dao.impl.BookDaoImpl.update())

    描述方式一:执行com.hyk.dao.impl包下的BookDaoImpl接口中的无参数update方法

    描述实现类和描述接口的都是OK的

    切入点表达式标准格式:动作关键字(访问修饰符 返回值 包名.类/接口名.方法名(参数) 异常名)

    • 动作关键字:描述切入点的行为动作,例如execution表示执行到指定切入点
    • 访问修饰符: public , private等,可以省略
    • 返回值
    • 包名
    • 类/接口名
    • 方法名
    • 参数
    • 异常名:方法定义中抛出指定异常,可以省略
       

    可以使用通配符描述切入点,快速描述

    • *  :单个独立的任意符号,可以独立出现,也可以作为前缀或者后缀的匹配符出现 
      1. execution(public * com.hyk.*.UserService.find*(*))
      2. 匹配com.hyk包下的任意包中的UserService类或者接口中所有find开头的带有一个参数的方法
    • .. :多个连续的任意符号, 可以独立出现,常用于简化包名与参数的书写
      1. execution(public User com..UserService.findById(..))
      2. 匹配com包下的任意包中的UserService类或者接口中所有名称为findById的方法
    • + :专用于匹配子类类型
      1. execution(* *..*Service+.*(..))

    书写技巧

    • 所有代码按照标准规范开发,否则以下技巧全部失效
    • 描述切入点通常描述接口,而不描述实现类
    • 访问控制修饰符针对接口开发均采用public描述(可省略访问控制修饰符描述)
    • 返回值类型对于增删改类使用精准类型加速匹配,对于查询类使用通配快速描述
    • 包名书写尽量不使用..匹配,效率过低,常用*做单个包描述匹配,或精准匹配
    • 接口名/类名书写名称与模块相关的采用*匹配,例如UserService书写成*Service ,绑定业务层接口名
    • 方法名书写以动词进行精准匹配,名词采用*匹配,例如getByld书写成getBy *,selectAll书写成selectAlI
    • 参数规则较为复杂,根据业务方法灵活调整
    • 通常不使用异常作为匹配规则

    通知总结

    • 通知类型
      • 前置通知
      • 后置通知
      • 环绕通知( 重点)
        • ◆环绕通 知依赖形参ProceedingJoinPoint才能实现对原始方法的调用
        • ◆环绕通知可 以隔离原始方法的调用执行
        • ◆环绕通 知返回值设置为0bject类型
        • ◆环绕通知中可以对原始方法调用过程中出现的异常进行处理
      • 返回后通知
      • 抛出异常后通知
         
    • 获取切入点方法的参数
      • JoinPoint :造用于前置、后置、返回后、抛出异常后通知,设置为方法的第一个形参
      • ProceedJointPoint:适用于环绕通知
    • 获取切入点方法返回值
      • 返回后通知
      • 环绕通知
    • 获取切入点方法运行异常信息
      • 抛出异常后通知
      • 环绕通知
         

  • 相关阅读:
    MySQL之函数
    vue 常用指令
    10min快速回顾C++语法(八)STL专题
    Python:练习:编写一个程序,写入一个美金数量,然后显示出如何用最少的20美元、10美元、5美元和1美元来付款
    计算机网络的定义和分类
    Tomat的默认servlet(DefaultServlet)
    今天不写代码,聊聊热门的知识图谱
    传输层协议—TCP协议
    Greetings
    短视频剪辑矩阵系统开发源码----源头搭建
  • 原文地址:https://blog.csdn.net/u011572366/article/details/125916220