Spring Aop源码学习--PointCut切入点
来源:互联网 发布:linux怎么下载安装vim 编辑:程序博客网 时间:2024/06/07 12:46
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。
阅读全文
0 0
- Spring Aop源码学习--PointCut切入点
- Spring的AOP(三):切入点Pointcut 、Advisor及引入
- Spring的静态Pointcut切入点
- Spring之 配置切入点Pointcut
- 5.3 AOP的3个关键概念 & 5.4 Spring的3种切入点(Pointcut)实现
- Spring--AOP--基本配置(切面Aspect,切入点Pointcut,通知Advice)
- Spring AOP之PointCut
- Spring AOP 定义切入点
- spring aop 切入点
- Spring AOP 定义切入点
- Spring AOP切入点表达式
- Spring AOP 切入点表达式
- Spring横切面(advice),增强(advisor),切入点(PointCut)
- Spring横切面(advice),增强(advisor),切入点(PointCut)
- Spring横切面(advice),增强(advisor),切入点(PointCut)
- Spring横切面(advice),增强(advisor),切入点(PointCut)
- Spring横切面(advice),增强(advisor),切入点(PointCut)
- Spring学习笔记:使用Pointcut 和Advisor实现AOP
- NOI_OPENJUDGE_2.5_166,1718 城堡问题
- 机器学习: batch normalization
- Oracle常用数据类型
- Query源码分析-----$.extend
- 端口转发
- Spring Aop源码学习--PointCut切入点
- C++ 字符串
- Form提交后禁止自动刷新
- JDBC之大段文本数据的保存与读取
- 广播(Broadcast)---《第一行代码Android》笔记
- java同步机制:synchronized
- java中局部变量和成员变量主要是他们作用域的区别
- 游戏周边增值服务
- Google优化工具Timeline的使用(Chrome 57已经改为performance(性能模板))