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等,可以省略
  • 返回值
  • 包名
  • 类/接口名
  • 方法名
  • 参数
  • 异常名:方法定义中抛出指定异常,可以省略
     

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

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

书写技巧

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

通知总结

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

你可能感兴趣的:(SSM,spring,java,后端)