SpringAop中的Pointcut、ClassFilter、MethodMatcher接口的定义

Pointcut接口的定义:

public interface Pointcut{
	ClassFilter getClassFilter();
	MethodMatcher getMethodMatcher();
	Pointcut TRUE =  TruePointcut.INSTANCE;
}

ClassFilter接口的定义:

public interface ClassFilter{
	boolean getClassFilter(Class clazz);
	ClassFilter TRUE = TrueClassFilter.INSTANCE;
}

MethodMatcher接口的定义:

public interface MethodMatcher{
	boolean matches(Method method, Class targetClass);
	boolean isRuntime();
	boolean matches(Method method, Class targetClass, Object[] args);
	MethodMatcher TRUE = TrueMethodMatcher.INSTACNE;
}

Pointcut接口作为SpringAop中对AOP的最顶层抽象,主要负责对系统的相应的Joinpoint进行捕捉,并且提供了一个TruePointcut实例,当Pointcut为TruePointcut类型时,则会忽略所有的匹配条件,对系统中所有的对象进行Joinpoint所定义的规则进行匹配;

ClassFilter与MethodMatcher分别用于在不同的级别上限定Joinpoint的匹配范围,满足不同粒度的匹配,ClassFilter限定在类级别上,MethodMatcher限定在方法级别上;但是SpringAop主要支持在方法级别上的匹配,所以对类级别的匹配支持相对简单一些;
当传入的clazz与Pointcut规定的类型一致时,则返回true,否则返回false,返回为true时,则表示对这个类进行植入操作,当类型对Joinpoint的匹配不产生影响的时候,可以让Pointcut接口中的ClassFilter getClassFilter()方法直接返回TrueClassFilter.INSTANCE,则表示对系统中的所有对象进行Joinpoint匹配;

MethodMatcher接口通过重载定义了两个matches()方法,两个参数的matches()被称为静态匹配,在匹配条件不是太严格时使用,可以满足大部分场景的使用,称之为静态的主要是区分为三个参数的matches()方法需要在运行时动态的对参数的类型进行匹配;两个方法的分界线就是boolean isRuntime()方法,进行匹配时先用两个参数的matches()方法进行匹配,若匹配成功,则检查boolean isRuntime()的返回值,若为true,则调用三个参数的matches()方法进行匹配(若两个参数的都匹配不中,三个参数的必定匹配不中),比如需要统计用户登录次数时,那么登录传入的参数就是可以忽略的,则调用两个参数的matches()方法就已经足够了,但是若要在登陆时对用户账号执行特殊的操作(如赋予特殊的操作权限),就需要对参数进行一个类似于检验的操作,就需要调用三个参数的matches()进行匹配。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值