spring中的切入点

  在spring中创建切入点就要实现Pointcut接口:Pointcut接口代码如下:

 1 public interface Pointcut {

 2 

 3 

 4     ClassFilter getClassFilter();

 5 

 6 

 7     MethodMatcher getMethodMatcher();

 8 

 9 

10 }

从此接口可以看出,如果要写一个切入点类,则须实现ClassFilter和MethodMatcher接口,这个两个接口的代码分别如下

 1 public interface ClassFilter {

 2 

 3     /**

 4           *此接口只定义了一个matches方法

 5           *其参数为一个代表被检测类Class的实例

 6           *如果切入点适合该类,则返回true

 7           *否则返回 false

 8      */

 9     boolean matches(Class<?> clazz);

10 

11 

12 }
 1 /**

 2 *spring支持静态和动态的MethodMatcher。一个MethodMatcher *具体取决于isRuntime方法的返回值,在使用MethoeMatcher时,*spring会*调用isRuntime()方法,返回false,则该*MethodMatcher是静态的,否则就是动态的。

 3 public interface MethodMatcher {

 4 

 5     

 6     boolean matches(Method method, Class<?> targetClass);

 7 

 8 

 9     boolean isRuntime();

10 

11     

12     

13     boolean matches(Method method, Class<?> targetClass, Object[] args);

14 

15 

16 }

当切入点是静态的时候,spring会针对目标上的每一个方法调用一次MethodMatcher的matches(Method method, Class<?> targetClass)方法,其返回值被缓存一边日后调用该方法时使用。这样对每个方法的适用性只会进行一次检查,以后都利用缓存。

当切入点是动态的时候,spring仍然会在目标方法第一次调用时调用MethodMatcher的matches(Method method, Class<?> targetClass)方法进行静态适用性的检查,如果该方法的返回值是true,在此基础上,每次该方法被调用时spring还是会在此调用 matches(Method method, Class<?> targetClass, Object[] args)方法。这样,一个动态的MethodMatcher可以根据一次具体的方法调用,而不是方法本身,来决定切入点是否可用。

你可能感兴趣的:(spring)