第二十一章 Spring5.X ⾯向切⾯编程 AOP

1.什么是AOP⾯向切⾯编程

  • 什么是AOP
    Aspect Oriented Program ⾯向切⾯编程
    在不改变原有逻辑上增加额外的功能,⽐如解决系统层⾯的问题,或者增加新的功能
  • 场景
    权限控制
    缓存
    ⽇志处理
    事务控制
  • AOP思想把功能分两个部分,分离系统中的各种关注点
    核⼼关注点:业务的主要功能
    横切关注点:⾮核⼼、额外增加的功能
  • 好处
    减少代码侵⼊,解耦
    可以统⼀处理横切逻辑
    ⽅便添加和删除横切逻辑

2.AOP⾯向切⾯编程核⼼概念

  • 横切、通知、连接点、切⼊点、切⾯
  • 横切关注点
    对哪些⽅法进⾏拦截,拦截后怎么处理,这些就叫横切关注点
    ⽐如 权限认证、⽇志、事物
  • 通知 Advice
    在特定的切⼊点上执⾏的增强处理,有5种通知
    ⽐如你需要记录⽇志,控制事务 ,提前编写好通⽤的模块,需要的地⽅直接调⽤
  • 连接点 JointPoint
    要⽤通知的地⽅,业务流程在运⾏过程中需要插⼊切⾯的具体位置,
    ⼀般是⽅法的调⽤前后,全部⽅法都可以是连接点
    只是概念,没啥特殊
  • 切⼊点 Pointcut
    不能全部⽅法都是连接点,通过特定的规则来筛选连接点, 就是Pointcut,选中那⼏个你想要的⽅法
    在程序中主要体现为书写切⼊点表达式(通过通配、正则表达式)过滤出特定的⼀组JointPoint连接点
    过滤出相应的 Advice 将要发⽣的joinpoint地⽅
  • 切⾯ Aspect
    通常是⼀个类,⾥⾯定义 切⼊点+通知 , 定义在什么地⽅; 什么时间点、做什么事情
    通知 advice指明了时间和做的事情(前置、后置等)
    切⼊点 pointcut 指定在什么地⽅⼲这个事情
    web接⼝设计中,web层->⽹关层->服务层->数据层,每⼀层之间也是⼀个切⾯,对象和对象,⽅法和⽅法之间都是⼀个个切⾯
  • ⽬标 target
    ⽬标类,真正的业务逻辑,可以在⽬标类不知情的条件下,增加新的功能到⽬标类的链路上
  • 织⼊ Weaving
    把切⾯(某个类)应⽤到⽬标函数的过程称为织⼊
  • AOP代理
    AOP框架创建的对象,代理就是⽬标对象的加强
    Spring中的AOP代理可以使JDK动态代理,也可以是CGLIB代理

3.AOP⾥⾯的通知Advice类型

  • @Before前置通知
    在执⾏⽬标⽅法之前运⾏
  • @After后置通知
    在⽬标⽅法运⾏结束之后
  • @AfterReturning返回通知
    在⽬标⽅法正常返回值后运⾏
  • @AfterThrowing异常通知
    在⽬标⽅法出现异常后运⾏
  • @Around环绕通知
    在⽬标⽅法完成前、后做增强处理 ,环绕通知是最重要的通知类型 ,像事务,⽇志等都是环绕通知,注意编程中核⼼是⼀个ProceedingJoinPoint,需要⼿动执⾏ joinPoint.procced()

4.AOP⾯向切⾯编程实例

  • 常⻅例⼦
       ⽤户下单
           核⼼关注点:创建订单
           横切关注点:记录⽇志、控制事务
        ⽤户观看付费视频
           核⼼关注点:获取播放地址
           横切关注点:记录⽇志、权限认证
    在这里插入图片描述
  • 接⼝业务流程例⼦
    在这里插入图片描述在这里插入图片描述

5. Spring5.X AOP切⼊点表达式

  • 切⼊点表示式
    除了返回类型、⽅法名和参数外,其它项都是可选的 (修饰符基本都是省略不写)
    在这里插入图片描述
    @Pointcut(“execution(public int net.xdclass.sp.service.VideoOrderService.*(…))”)

  • 常⻅匹配语法

    • *:匹配任何数量字符 单个
    • …:匹配任何数量字符,可以多个,在类型模式中匹配任何数量⼦包;在⽅法参数模式中匹配任何数量参数
      在这里插入图片描述
  • 常⻅例⼦

    • 任意公共⽅法
      在这里插入图片描述
    • 任何⼀个名字以“save”开始的⽅法
      在这里插入图片描述
    • VideoService接⼝定义的任意⽅法(识别)
      在这里插入图片描述
    • 在service包中定义的任意⽅法(识别)
      在这里插入图片描述
    • 匹配 service 包,⼦孙包下所有类的所有⽅法(识别)
      在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值