AOP

什么是AOP

面向切面编程AOP是一种编程范式,在不惊动原始设计的基础上进行功能增强。

在Spring称为无入侵式编程。

  • 连接点:程序的执行点
  • 切入点PointCut:匹配连接点的式字
  • 通知方法:要追加的功能
  • 通知类:保存通知方法的类
  • 切面:切入点与通知的关系

AOP工作流程

  1. Spring容器启动
  2. 读取所有的切入点
@Pointcut("execution(void com.example.BookDao.save())")
private void pointCutSave() {}

@Pointcut("execution(void com.example.BookDao.update())")
private void pointCutUpdate() {}
  1. 初始化Bean,判定Bean的方法能否匹配切入点
    1. 匹配失败,创建对象
    2. 匹配成功,创建原始对象的代理对象 class jdk.proxy2.$Proxy19
  2. 获取Bean执行方法

切入点表达式

动作关键字(访问修饰符 返回值 包名.类/接口.方法名(参数) 异常),最好反着看

  1. "*" 可以福利出现,也可以作为前缀和后缀,作为参数表示至少有要一个参数
  2. ".." 简化包名和参数书写,尽量不使用
  3. "+" 描述子类

AOP通知类型

  • @Before 前
  • @After 后
  • @Around 环绕
      @Around("pointCutSave()")
      public Object Around(ProceedingJoinPoint joinPoint) throws Throwable {
          System.out.println("before");
          Object temp = joinPoint.proceed();
          System.out.println("after");
          return temp;
      }
    
    • Object[] args = joinPoint.getArgs(); 获得需要的参数,并可以进行处理
    • Object result = joinPoint.proceed();执行方法
  • AfterReturning
  • AfterThrowing
posted @ 2025-02-23 14:20  自来人  阅读(5)  评论(0)    收藏  举报