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可以根据一次具体的方法调用,而不是方法本身,来决定切入点是否可用。

posted on 2012-10-18 15:56  幸福从不迟疑  阅读(1244)  评论(0编辑  收藏  举报