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的一个示例代码如下:
1 <bean id="settersAndAbsquatulatePointcut" class="org.springframework.aop.support.RegexpMethodPointcut"> 2 <property name="patterns"> 3 <!--设定切入点> 4 <list> 5 <value>.*save.*</value> 6 <value>.*do.*</value> 7 </list> 8 </porperty> 9 </bean>
.*save.*:表示所有以save开头的方法都是切入点
.*do.*:表示所有以do开头的方法都是切入点
动态切入点
动态切入点与静态切入点的区别是,它不仅限定于给点的方法和类,动态切入点还可以以指定方法的参数。因为参数的变化性,所有动态切入点不能缓存,需要么次调用的时候都进行计算,因此使用动态切入点有很大性能损耗。
当切入点需要在执行时根据参数值来调用通知时,就需要使用动态切入点。Spring提供了一个内建的动态切入点:控制流切入点。此切入点匹配基于当前线程的调用堆栈。开发人员只有在当前线程执行时找到特定的类和特定的方法才返回true。
其实大多数的切入点可以使用静态切入点,所有很少有机会创建动态切入点。
自定义切入点
暂不学习