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

  • 相关阅读:
    mysql 不能远程连接
    ajax 内部值 外部调用不了原因
    vm NAT方式linux上不了网 解决方法
    wordpress 在linux上配置固定url方法
    win8 报file://CBD 0xc0000034 蓝屏
    VM 打开虚拟机时报“内部错误”
    thinkphp 前后版本ajaxReturn方法的分别
    thinkphp3.2引入php 实例化类
    putty 实现不用输入用户名密码直接登陆
    jQuery 遍历
  • 原文地址:https://www.cnblogs.com/binger/p/2729655.html
Copyright © 2011-2022 走看看