Spring Aop源码学习--PointCut切入点
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切入点相关推荐
- Spring Aop源码学习--Advice通知
Advice通知,所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置.后置.异常.最终.环绕通知五类 (1)BeforeAdvice.AfterAdvice:SpringAOP自定义的通知, ...
- Spring AOP源码(1)—<aop:config/>AOP配置标签解析【一万字】
基于最新Spring 5.x,对Spring AOP中的<aop:config/>标签的解析源码进行了详细分析,这是Spring AOP源码的入口! 此前我们已经详细学习了Spri ...
- Spring AOP源码(2)—AspectJAwareAdvisorAutoProxyCreator创建代理对象【两万字】
基于最新Spring 5.x,介绍了Spring AOP中的AspectJAwareAdvisorAutoProxyCreator自动代理创建者的工作流程,对于创建代理对象的源码进行了深度分析! ...
- 76 张图,剖析 Spring AOP 源码,小白居然也能看懂,大神,请收下我的膝盖!
下面我会简单介绍一下 AOP 的基础知识,以及使用方法,然后直接对源码进行拆解. 不 BB,上文章目录. 1. 基础知识 1.1 什么是 AOP ? AOP 的全称是 "Aspect Ori ...
- Spring AOP 源码分析 - 筛选合适的通知器
1.简介 从本篇文章开始,我将会对 Spring AOP 部分的源码进行分析.本文是 Spring AOP 源码分析系列文章的第二篇,本文主要分析 Spring AOP 是如何为目标 bean 筛选出 ...
- spring AOP源码分析(一)
spring AOP源码分析(一) 对于springAOP的源码分析,我打算分三部分来讲解:1.配置文件的解析,解析为BeanDefination和其他信息然后注册到BeanFactory中:2.为目 ...
- 一步一步手绘Spring AOP运行时序图(Spring AOP 源码分析)
相关内容: 架构师系列内容:架构师学习笔记(持续更新) 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程) 一步一步手绘Spring IOC运行时序图二(基于XM ...
- 【Spring】Spring AOP源码分析-导读(一)
文章目录 1.简介 2.AOP 原理 3.AOP 术语及相应的实现 3.1 连接点 - Joinpoint 3.2 切点 - Pointcut 3.3 通知 - Advice 3.4 切面 - Asp ...
- Spring AOP 源码分析 - 拦截器链的执行过程
1.简介 本篇文章是 AOP 源码分析系列文章的最后一篇文章,在前面的两篇文章中,我分别介绍了 Spring AOP 是如何为目标 bean 筛选合适的通知器,以及如何创建代理对象的过程.现在我们的得 ...
最新文章
- c# redis 如何设置过期时间_Redis Hash存储token、及设置过期时间
- seq2seq模型_直观理解并使用Tensorflow实现Seq2Seq模型的注意机制
- exe文件添加为服务
- 福州java培训哪里好_广州java学习哪里好?需要学多长时间
- MySQL 随笔记录
- jQuary总结11:jQuery插件封装---jQuery封装 手风琴 动画插件
- 【Python】模块学习之Timer定时任务,递归定时自调获取博客浏览量
- 移动端浏览器监听返回键
- jupyter notebook 中文乱码问题解决
- 蓝桥杯题目——平方回文数
- 利用ant自动从vss下载代码并编译到自动发布
- 算法与数据结构——有序表(Java)(b站左程云课程笔记总结)
- 学计算机网络布线图片,从业必看!直观的弱电各子系统图!
- 计算机学业水平考试反思总结8百,期中考试后的反思总结800字
- 使用opencv和双目摄像头制作裸眼3d视频
- 空军资深战略研究员:房地产支撑不起大国崛起
- 手机nfc的简单使用
- UVA1445 	 Cubist Artwork
- myeclipse 6.5 注册码 myeclipse 6.0 注册码
- 智慧汽车服务2.0.6 汽车美容 保养 维修 洗车一站式平台源码
热门文章
- 不需要下载电脑软件,就能解决U盘里不显示文件的两种方法
- Git的下载和基本使用
- java 内部匿名类_java匿名类和匿名内部类详解
- MySQL 8.0.19 下载与安装(Windows系统)
- msvcp140_atomic_wait.dll文件丢失如何解决?
- vue实现webapp
- 让学生用计算机给诗配画,全国信息技术优质课课稿《古诗配画》.doc
- 手游党必备!OPPO R17 Pro王者定制版来了
- 你一直都是我温馨的眷恋
- 【Gin⭐012】Go语言Gin框架-错误信息翻译成中文