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可以根据一次具体的方法调用,而不是方法本身,来决定切入点是否可用。
人生最可贵的事情是sb似的坚持于追求……