首先看一下Pointcut接口的定义:
package org.springframework.aop;
public interface Pointcut {
ClassFilter getClassFilter();
MethodMatcher getMethodMatcher();
Pointcut TRUE = TruePointcut.INSTANCE;
}
ClassFilter接口决定一个类是否要应用于Advice。
ClassFilter接口定义如下:
package org.springframework.aop;
public interface ClassFilter {
boolean matches(Class clazz);
ClassFilter TRUE = TrueClassFilter.INSTANCE;
}
matches()方法中要决定传入的类是不是符合Pointcut的定义,如果此类符合Pointcut的定义,则返回TRUE,否则返回FALSE。
ClassFilter.TRUE是ClassFilter的简单实现,他总是返回true。
下面就要看一下TrueClassFilter类的实现:
package org.springframework.aop;
import java.io.Serializable;
class TrueClassFilter implements ClassFilter, Serializable {
public static final TrueClassFilter INSTANCE = new TrueClassFilter();
private TrueClassFilter() {
}
public boolean matches(Class clazz) {
return true;
}
private Object readResolve() {
return INSTANCE;
}
public String toString() {
return "ClassFilter.TRUE";
}
}
此类定义了一个static的实例,并将其构造函数设置成private,目的是将其设置为singleton模式(对任意多请求返回同一实例)。
上面已经提到过了,ClassFilter.TRUE是ClassFilter的简单实现,他总是返回true。在这里对matches()方法的实现即可看出其原因。其中的readResolve()方法是提供对序列化的支持。
Pointcut.TRUE是Pointcut接口的简单实现。