PointCut切入点简单来说就是用来指明Advice(增强)所作用的地方(一般指方法),PointCut简单来说是一个基于表达式的拦截条件。

PointCut接口及实现类:

PointCut接口提供了两个接口分别对类和方法进行匹配过滤,如果类及方法匹配成功则Advice就可以作用在方法上。

public interface Pointcut {/*** Return the ClassFilter for this pointcut.* @return the ClassFilter (never {@code null})*///通过pointcut表达式对类进行过滤ClassFilter getClassFilter();/*** Return the MethodMatcher for this pointcut.* @return the MethodMatcher (never {@code null})*///通过pointcut表达式对方法进行过滤MethodMatcher getMethodMatcher();/*** Canonical Pointcut instance that always matches.*///匹配所有的类及方法,默认返回truePointcut TRUE = TruePointcut.INSTANCE;}

在PointCut的子类AspectJExpressionPointcut中提供了两个方法对类和方法进行匹配判断,其最后的过滤的处理操作还是在aspectjweaver(aspectJ类库,AspectJ是一个专门用来实现动态代理(AOP编程)的类库,AspectJ是面向切面编程的框架,Spring使用就是这个类库实现动态代理的)这个jar中完成的。

 //对类进行过滤匹配@Overridepublic boolean matches(Class<?> targetClass) {checkReadyToMatch();try {try {return this.pointcutExpression.couldMatchJoinPointsInType(targetClass);}catch (ReflectionWorldException ex) {logger.debug("PointcutExpression matching rejected target class - trying fallback expression", ex);PointcutExpression fallbackExpression = getFallbackPointcutExpression(targetClass);if (fallbackExpression != null) {return fallbackExpression.couldMatchJoinPointsInType(targetClass);}}}catch (Throwable ex) {logger.debug("PointcutExpression matching rejected target class", ex);}return false;}//对方法进行过滤匹配@Overridepublic boolean matches(Method method, Class<?> targetClass, boolean beanHasIntroductions) {checkReadyToMatch();Method targetMethod = AopUtils.getMostSpecificMethod(method, targetClass);ShadowMatch shadowMatch = getShadowMatch(targetMethod, method);if (shadowMatch.alwaysMatches()) {return true;}else if (shadowMatch.neverMatches()) {return false;}else {if (beanHasIntroductions) {return true;}RuntimeTestWalker walker = getRuntimeTestWalker(shadowMatch);return (!walker.testsSubtypeSensitiveVars() || walker.testTargetInstanceOfResidue(targetClass));}}

总结:PointCut接口及其实现类就是根据我们配置的类及方法的过滤规则在调用Advice之前进行过滤,看看是否需要调用Advice。

Spring Aop源码学习--PointCut切入点相关推荐

  1. Spring Aop源码学习--Advice通知

    Advice通知,所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置.后置.异常.最终.环绕通知五类 (1)BeforeAdvice.AfterAdvice:SpringAOP自定义的通知, ...

  2. Spring AOP源码(1)—<aop:config/>AOP配置标签解析【一万字】

      基于最新Spring 5.x,对Spring AOP中的<aop:config/>标签的解析源码进行了详细分析,这是Spring AOP源码的入口!   此前我们已经详细学习了Spri ...

  3. Spring AOP源码(2)—AspectJAwareAdvisorAutoProxyCreator创建代理对象【两万字】

      基于最新Spring 5.x,介绍了Spring AOP中的AspectJAwareAdvisorAutoProxyCreator自动代理创建者的工作流程,对于创建代理对象的源码进行了深度分析! ...

  4. 76 张图,剖析 Spring AOP 源码,小白居然也能看懂,大神,请收下我的膝盖!

    下面我会简单介绍一下 AOP 的基础知识,以及使用方法,然后直接对源码进行拆解. 不 BB,上文章目录. 1. 基础知识 1.1 什么是 AOP ? AOP 的全称是 "Aspect Ori ...

  5. Spring AOP 源码分析 - 筛选合适的通知器

    1.简介 从本篇文章开始,我将会对 Spring AOP 部分的源码进行分析.本文是 Spring AOP 源码分析系列文章的第二篇,本文主要分析 Spring AOP 是如何为目标 bean 筛选出 ...

  6. spring AOP源码分析(一)

    spring AOP源码分析(一) 对于springAOP的源码分析,我打算分三部分来讲解:1.配置文件的解析,解析为BeanDefination和其他信息然后注册到BeanFactory中:2.为目 ...

  7. 一步一步手绘Spring AOP运行时序图(Spring AOP 源码分析)

    相关内容: 架构师系列内容:架构师学习笔记(持续更新) 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程) 一步一步手绘Spring IOC运行时序图二(基于XM ...

  8. 【Spring】Spring AOP源码分析-导读(一)

    文章目录 1.简介 2.AOP 原理 3.AOP 术语及相应的实现 3.1 连接点 - Joinpoint 3.2 切点 - Pointcut 3.3 通知 - Advice 3.4 切面 - Asp ...

  9. Spring AOP 源码分析 - 拦截器链的执行过程

    1.简介 本篇文章是 AOP 源码分析系列文章的最后一篇文章,在前面的两篇文章中,我分别介绍了 Spring AOP 是如何为目标 bean 筛选合适的通知器,以及如何创建代理对象的过程.现在我们的得 ...

最新文章

  1. c# redis 如何设置过期时间_Redis Hash存储token、及设置过期时间
  2. seq2seq模型_直观理解并使用Tensorflow实现Seq2Seq模型的注意机制
  3. exe文件添加为服务
  4. 福州java培训哪里好_广州java学习哪里好?需要学多长时间
  5. MySQL 随笔记录
  6. jQuary总结11:jQuery插件封装---jQuery封装 手风琴 动画插件
  7. 【Python】模块学习之Timer定时任务,递归定时自调获取博客浏览量
  8. 移动端浏览器监听返回键
  9. jupyter notebook 中文乱码问题解决
  10. 蓝桥杯题目——平方回文数
  11. 利用ant自动从vss下载代码并编译到自动发布
  12. 算法与数据结构——有序表(Java)(b站左程云课程笔记总结)
  13. 学计算机网络布线图片,从业必看!直观的弱电各子系统图!
  14. 计算机学业水平考试反思总结8百,期中考试后的反思总结800字
  15. 使用opencv和双目摄像头制作裸眼3d视频
  16. 空军资深战略研究员:房地产支撑不起大国崛起
  17. 手机nfc的简单使用
  18. UVA1445 Cubist Artwork
  19. myeclipse 6.5 注册码 myeclipse 6.0 注册码
  20. 智慧汽车服务2.0.6 汽车美容 保养 维修 洗车一站式平台源码

热门文章

  1. 不需要下载电脑软件,就能解决U盘里不显示文件的两种方法
  2. Git的下载和基本使用
  3. java 内部匿名类_java匿名类和匿名内部类详解
  4. MySQL 8.0.19 下载与安装(Windows系统)
  5. msvcp140_atomic_wait.dll文件丢失如何解决?
  6. vue实现webapp
  7. 让学生用计算机给诗配画,全国信息技术优质课课稿《古诗配画》.doc
  8. 手游党必备!OPPO R17 Pro王者定制版来了
  9. 你一直都是我温馨的眷恋
  10. 【Gin⭐012】Go语言Gin框架-错误信息翻译成中文