Pointcut是Join Point的集合,它是程序中需要注入Advice的位置的集合。Spring主要提供了3种切入点的实现:

   1.静态切入点;

   2.动态切入点;

3.自定义切入点。

静态切入点

  只限于给定的方法和目标类,而不考虑方法的参数。Spring在调用鼎泰切入点时只在第一次的时候计算静态切入点的位置,然后把它缓存起来,以后就不需要在进行计算。使用org.springframework.aso.support.RegexpMethodPointcut 可以实现静态切入点。RegexpMethodPointcut是一个通用的正则表达式切入点,它是通过Jakarta ORO来实现的,需要把jakarta-oro-2.0.8.jar加入到ClassPath中,它的正则表达式语法和Jakarta ORO的正则表达式语法是一样的。使用RegexpMethodPointcut的一个示例代码如下:

 <bean id="settersAndAbsquatulatePointcut" class="org.springframework.aop.support.RegexpMethodPointcut">
  <property name="patterns">
    <!--设定切入点>
    <list>
      <value>.*save.*</value>
      <value>.*do.*</value>
    </list>
  </porperty>
</bean>

.*save.*:表示所有以save开头的方法都是切入点

.*do.*:表示所有以do开头的方法都是切入点

动态切入点

  动态切入点与静态切入点的区别是,它不仅限定于给点的方法和类,动态切入点还可以以指定方法的参数。因为参数的变化性,所有动态切入点不能缓存,需要么次调用的时候都进行计算,因此使用动态切入点有很大性能损耗。

  当切入点需要在执行时根据参数值来调用通知时,就需要使用动态切入点。Spring提供了一个内建的动态切入点:控制流切入点。此切入点匹配基于当前线程的调用堆栈。开发人员只有在当前线程执行时找到特定的类和特定的方法才返回true。

  其实大多数的切入点可以使用静态切入点,所有很少有机会创建动态切入点。

自定义切入点

  暂不学习

04-28 08:58