AOP--面向切面编程

2 篇文章 0 订阅

AOP

什么是AOP

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GeOt0RUP-1617794445028)(:storage\62aed088-3571-46d1-9983-86d7985ccc7f\0224e587.png)]

AOP和作用和优势

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LaJMyJMt-1617794445030)(:storage\62aed088-3571-46d1-9983-86d7985ccc7f\ce8c2d23.png)]

AOP的实现方式

使用动态代理的方式

AOP相关术语

  • Joinpoint( 连接点):
    所谓连接点是指那些被拦截到的点。在 spring 中,这些点指的是方法,因为 spring 只支持方法类型的
    连接点。
  • Pointcut( 切入点):
    所谓切入点是指我们要对哪些 Joinpoint 进行拦截的定义。
  • Advice( 通知/ 增强):
    所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知。
    通知的类型:前置通知,后置通知,异常通知,最终通知,环绕通知。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UcwNDOCK-1617794445034)(:storage\62aed088-3571-46d1-9983-86d7985ccc7f\73f254b5.png)]
  • Introduction( 引介):
    引介是一种特殊的通知在不修改类代码的前提下, Introduction 可以在运行期为类动态地添加一些方
    法或 Field。
  • Target( 目标对象):
    代理的目标对象。
  • Weaving( 织入):
    是指把增强应用到目标对象来创建新的代理对象的过程。
    spring 采用动态代理织入,而 AspectJ 采用编译期织入和类装载期织入。
  • Proxy (代理):
    一个类被 AOP 织入增强后,就产生一个结果代理类。
  • Aspect( 切面):
    是切入点和通知(引介)的结合。

四种常用的通知类型

AOP四种常用的通知类型
Spring框架为我们提供了一个接口:ProceedingJoinPoint。该接口有一个方法proceed(),此方法就相当于明确调用切入点方法。
* 该接口可以作为环绕通知的方法参数,在程序执行时,spring框架会为我们提供该接口的实现类供我们使用。
*
* spring中的环绕通知:
* 它是spring框架为我们提供的一种可以在代码中手动控制增强方法何时执行的方式。
* 能用环绕通知就用环绕 因为spring四种通知顺序上的会出现调用异常

  • 前置通知

  • 后置通知

  • 异常通知

  • 最终通知

  <aop:pointcut id="pt1" expression="execution(* com.itheima.service.impl.*.*(..))"></aop:pointcut>
        <!--配置切面 -->
        <aop:aspect id="logAdvice" ref="logger">
            <!-- 配置前置通知:在切入点方法执行之前执行
            <aop:before method="beforePrintLog" pointcut-ref="pt1" ></aop:before>-->

            <!-- 配置后置通知:在切入点方法正常执行之后值。它和异常通知永远只能执行一个
            <aop:after-returning method="afterReturningPrintLog" pointcut-ref="pt1"></aop:after-returning>-->

            <!-- 配置异常通知:在切入点方法执行产生异常之后执行。它和后置通知永远只能执行一个
            <aop:after-throwing method="afterThrowingPrintLog" pointcut-ref="pt1"></aop:after-throwing>-->

            <!-- 配置最终通知:无论切入点方法是否正常执行它都会在其后面执行
            <aop:after method="afterPrintLog" pointcut-ref="pt1"></aop:after>-->

            <!-- 配置环绕通知 详细的注释请看Logger类中-->
            <aop:around method="aroundPringLog" pointcut-ref="pt1"></aop:around>
        </aop:aspect>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值