Spring : Spring 切入点(Pointcut)

1.美图

在这里插入图片描述

2.概述

切入点概念参考:Spring :Spring AOP 中的一些术语

3.案例

待补充

4.Pointcut接口

4.1 拓扑图

在这里插入图片描述
这里只显示了第一层。

4.2 源码

public interface Pointcut {
	/**
	 * 返回当前切点匹配的类
	 */
	ClassFilter getClassFilter();

	/**
	 * 返回当前切点匹配的方法
	 */
	MethodMatcher getMethodMatcher();


	/**
	 * Canonical Pointcut instance that always matches.
	 */
	Pointcut TRUE = TruePointcut.INSTANCE;

}

Pointcut接口的定义非常简单,仅仅包含了ClassFilterMethodMatcher的定义,ClassFilter可以定位到具体的类上,MethodMatcher可以定位到具体的方法上,这样通过Pointcut我们就可以将将增强织入到特定类的特定方法上了。再来看下ClassFilterMethodMatcher的定义:

5.ClassFilter接口

5.1 拓扑图

在这里插入图片描述

5.2 源码

public interface ClassFilter {

	/**
	 * 切入点应该应用于给定的接口还是目标类
	 * Should the pointcut apply to the given interface or target class?
	 * @param clazz the candidate target class 候选目标类
	 * @return whether the advice should apply to the given target class 增强是否应用于目标类
	 */
	boolean matches(Class<?> clazz);


	/**
	 * Canonical instance of a ClassFilter that matches all classes.
	 */
	ClassFilter TRUE = TrueClassFilter.INSTANCE;

}

6.MethodMatcher接口

public interface MethodMatcher {

	/**
	 * 静态方法匹配判断
	 */
	boolean matches(Method method, Class<?> targetClass);

	/**
	 * 判断静态方法匹配或动态方法匹配
	 * true:动态方法匹配
	 * false:静态方法匹配
	 */
	boolean isRuntime();

	/**
	 * 动态方法匹配判断
	 */
	boolean matches(Method method, Class<?> targetClass, Object... args);


	/**
	 * Canonical instance that matches all methods.
	 */
	MethodMatcher TRUE = TrueMethodMatcher.INSTANCE;

}

6.1 方法匹配模式

在MethodMatcher接口中又引入了一个新的概念,方法匹配模式,Spring支持两种方法匹配器:

  1. 静态方法匹模式:所谓静态方法匹配器,仅对方法名签名(包括方法名和入参类型及顺序)进行匹配。
  2. 动态方法匹配器:动态方法匹配器会在运行期方法检查入参的值。 静态匹配仅会判断一次,而动态匹配因为每次调用方法的入参可能不一样,所以每次调用方法都必须判断。

7.Spring提供的切点类型

  1. 静态方法切点->org.springframework.aop.support.StaticMethodMatcherPointcut
    静态方法切点的抽象基类,默认情况下匹配所有的类。最常用的两个子类NameMatchMethodPointcutAbstractRegexpMethodPointcut , 前者提供简单字符串匹配方法签名,后者使用正则表达式匹配方法签名。
  2. 动态方法切点–>org.springframework.aop.support.DynamicMethodMatcherPointcut动态方法切点的抽象基类,默认情况下匹配所有的类
  3. 注解切点–>org.springframework.aop.support.annotation.AnnotationMatchingPointcut
  4. 表达式切点–>org.springframework.aop.support.ExpressionPointcut
    提供了对AspectJ切点表达式语法的支持
  5. 流程切点–>org.springframework.aop.support.ControlFlowPointcut
    该切点是一个比较特殊的节点,它根据程序执行的堆栈信息查看目标方法是否由某一个方法直接或间接发起调用,一次来判断是否为匹配的链接点
  6. 复合切点–>org.springframework.aop.support.ComposablePointcut
    该类是为实现创建多个切点而提供的操作类
发布了1048 篇原创文章 · 获赞 436 · 访问量 127万+

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 酷酷鲨 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览