本篇文章主要介绍了"spring-aop组件详解——ClassFilter类过滤器",主要涉及到Spring,filter方面的内容,对于其他编程jrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下:
术语定义:ClassFilter:类过滤器Advisor:通知器targetClass:目标类,或称被代理的原始类Advice:通知,或称拦截器,也就是要增强的...
术语定义:
- ClassFilter:类过滤器
- Advisor:通知器
- targetClass:目标类,或称被代理的原始类
- Advice:通知,或称拦截器,也就是要增强的代码逻辑
- MethodMatcher:方法匹配器
- Pointcut:切点,由ClassFilter和MethodMatcher组成
ClassFilter,用于约束一个Advisor,与指定的targetClass是否匹配。只有匹配的前提下,Advisor才能使用其内部持有的Advice对targetClass进行增强。
Advisor分两大类:IntroductionAdvisor(引介通知器)和PointcutAdvisor(切点通知器)。两类Advisor都是为了增强targetClass,但是作用不一样。IntroductionAdvisor主要为了给targetClass追加接口(或者说追加更多的方法),这种增强属于类级别的增强;而PointcutAdvisor主要为了拦截方法,这种增强属于方法级别的增强。
正是由于两类Advisor的增强级别不同,而导致了对ClassFilter的使用方式不同。IntroductionAdvisor进行类级别增强,因此只需要直接持有ClassFilter即可;而PointcutAdvisor进行方法级别增强,因此需要同时使用ClassFilter和MethodMatcher(方法匹配器)。PointcutAdvisor内部持有一个Pointcut,而Pointcut就是由ClassFilter和MethodMatcher组成的。
ClassFilter只定义了唯一的方法,代码如下:
/**
* 当前类过滤器是否与指定的类型匹配,
* 如果匹配,则需要把自身内部持有的Advice应用的目标类上。
*
* @param clazz 候选目标类
* @return Advice通知是否应该应用到指定的目标类
*/
public abstract boolean matches(Class> clazz);
ClassFilter组件的体系图如下:

从图中可以看出,ClassFilter有4中简单方式的实现:
- TypePatternClassFilter:基于AspectJ的类型匹配实现
- AnnotationClassFilter:通过检查目标类是否存在指定的注解,决定是否匹配
- RootClassFilter:通过判断目标类是否是指定类型(或其子类型),决定是否匹配
- TrueClassFilter:这是最简单实现,matches方法总会返回true。此类设计使用了单例模式,且其对象引用直接被在ClassFilter接口中声明成了常量。
除此之外,还有两种特殊方式的实现: