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

  • 相关阅读:
    扩展json序列化datatime类型数据
    用select实现socket的IO多路复用
    Python单例模式
    Django(信号相关)
    将字符串按固定长度分隔成子串
    Android Handler介绍
    Android activity生命周期
    Java 启动线程的方式
    java线程中的sleep和wait区别
    JAVA 统计字符串中中文,英文,数字,空格的个数
  • 原文地址:https://www.cnblogs.com/binger/p/2729655.html
Copyright © 2011-2022 走看看