springAop原理之(二)Advisor、pointcut接口族介绍

6 篇文章 0 订阅

​​​​​​​​ 在这里插入图片描述

一.Advisor

Advisor

  包含AOP通知advice的基本接口(在连接点joinpoint采取的操作),和一个确定通知advice的适用性的过滤器(例如一个切入点pointcut)。换种说法就是:通过切点pointcut过滤出哪些joinpoint需要被拦截,然后对被拦截方法执行增强的逻辑,也就是advice。
  Advisor有两个子接口PointcutAdvisor和IntroductionAdvisor。

IntroductionAdvisor

  是对类的增强,在原有的功能上增加一些其他接口定义的方法。引入(Introduction)通常是mixins ,可以构建复合对象,从而实现 Java 中多重继承的许多目标。这里不做过多说明。

PointcutAdvisor

  由切入点驱动的所有Advisor的超级接口。这几乎涵盖了除introduction advisors以外的所有Advisor。PointcutAdvisor中包含了一个Pointcut成员变量,也就是切点,在加上Advisor接口中的Advice,就形成了一个完整的切面。

PointcutAdvisor子接口或子类

  • StaticMethodMatcherPointcutAdvisor:Advisors的便利基类,也是静态切入点(该类继承了StaticMethodMatcherPointcut),如果 Advice 和 subclass 是可序列化的。,默认情况下匹配所有的的目标类。(shiro权限设计就是通过继承该类实现的。AuthorizationAttributeSourceAdvisor extends StaticMethodMatcherPointcutAdvisor )。静态切入点只限于给定的方法和目标类,而不考虑方法的参数。Spring在调用静态切入点时只在第一次调用的时候计算静态切入点的位置,然后缓存起来。所谓静态就是与运行时无关。所以StaticMethodMatcherPointcut中的MethodMatcher的matches(Method method, Class<?> targetClass, Object… args)三个参数的方法抛出异常。
  • InstantiationModelAwarePointcutAdvisor:该接口有唯一实现类InstantiationModelAwarePointcutAdvisorImpl。该实现类是AspectJPointcutAdvisor 的内部实现。请注意,每个目标方法都会有一个此Advisor程序的实例。该类就是我们通常在项目中通过aspectj注解实现的切面被包装后的Advisor。
    -AspectJPointcutAdvisor:AspectJ相关的。
  • AbstractPointcutAdvisor:PointcutAdvisor实现的抽象基类,可以为返回特定切入点/通知或可自由配置的切入点/通知的子类

pointcut

  切入点(Pointcut)是连接点(joinpoint)位置的集合,指明触发通知(Advice)的条件.切入点由ClassFilter和MethodMatcher组成。

ClassFilter

  限制切入点class匹配,也就是对class进行过滤

MethodMatcher

检查目标方法是否有资格获得advice,即使对method的过滤。
  MethodMatcher 可以静态评估或在运行时(动态)评估。静态匹配涉及方法和(可能)方法属性。动态匹配还使特定调用的参数可用,并且运行先前建议的任何效果都适用于连接点。
  如果isRuntime()方法返回false ,则可以静态执行评估,并且对于此方法的所有调用,无论其参数如何,结果都是相同的。这意味着如果isRuntime()方法返回false ,则永远不会调用 3个参数 matches方法。
  如果实现从其 2个参数matches方法返回true并且其isRuntime()方法返回true ,则 3个参数 matches方法将在每个潜在相关的advice的执行之前立即调用,以决定advice是否应该运行。所有先前的advice,例如拦截器链中的早期拦截器,都将运行,因此它们在参数或 ThreadLocal 状态中产生的任何状态更改都将在评估时可用。
  简单来说就是进行匹配时先用两个参数的matches()方法进行匹配,若匹配成功,则检查boolean isRuntime()的返回值,若为true,则调用三个参数的matches()方法进行匹配。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值