自学内容网 自学内容网

Spring框架(三)——AOP--基础部分

1、概括

  • 与核心业务无关的代码独立的抽取出来,形成一个独立的组件(抽取公共代码的过程),然后以横向交叉的方式应用到业务流程当中的过程被称为AOP
  • 优点
    • 代码复用性强
    • 代码易维护

    • 使开发者更专注于业务逻辑

2、AOP的底层原理:

        JDK动态代理技术

  • 为接口创建代理类的字节码文件

  • 使用ClassLoader将字节码文件加载到JVM

  • 创建代理类实例对象,执行对象的目标方法

3、七大术语

  • 连接点Joinpoint
    • 指那些被拦截到的点(位置)。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点
  • 切点Pointcut
    • 指我们要对哪些Joinpoint进行拦截的定义,在程序执行流程中,真正织入切面的方法(一个切点对应多个连接点)
  • 切面Aspect
    • 切点+通知就是一个切面,需要自己编写和配置
  • 通知Advice
    • 通知又叫增强,就是具体你要织入的代码
    • 通知包括:
      • 前置通知:befer
      • 后置通知:after-returning
      • 最终通知:after
      • 异常通知:throwing
      • 环绕通知:around
  • 织入Weaving
    • 通知应用到目标对象上的过程(指把增强应用到目标对象来创建新的代理对象的过程)
  • 代理对象 Proxy
    • 一个目标对象被织入通知后产生的新对象
  • 目标对象 Target 
    • 被织入通知的对象
  • 整体图示如下:
    • img

4、切点表达式

  • 切点表达式用来定义通知(Advice)往哪些方法上切入,语法格式如下: 
    • execution([访问控制权限修饰符] 返回值类型 [全限定类名]方法名(形式参数列表) [异常])
  • 访问权限控制符
    • 可选项:没写就是4种权限都可以
  • 返回值类型:
    • 必填项:若为“*”,表示返回值类型任意 
  • 全限定类名:
    • 可选项:两个点“..”表示当前包以及子包下的所有类,若省略,就表示所有的类
  • 方法名:
    • 必填项:“*”表示所有方法,set * 表示所有的set方法
  • 形式参数列表
    • 必填项
      • ():表示没有参数的列表
      • (..) :参数类型和个数随意的方法
      • (*): 只有一个参数的方法
      • (*, String): 第一个参数类型随意,第二个参数是String的
  • 异常
    • 可选项:省略是表示任意异常
  • 例如:
    • execution(public * com.powernode.mall.service.*.delete*(..))
      表示返回值类型任意,处于com.powernode.mall.service包下的所有类的所有参数任意的deleteXxx方法
          
      execution(* com.powernode.mall..*(..))
      任意修饰符、返回值类型的,处于com.powernode.mall报下的所有方法
          
      execution(* *(..))
      表示该项目的所有方法


原文地址:https://blog.csdn.net/qq_51321722/article/details/140086357

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!