Spring的3种切入点(Pointcut)实现

本文详细介绍了Spring AOP中的静态切入点、动态切入点和自定义切入点的实现方式及应用场景,帮助开发者理解如何灵活地利用这三种切入点进行面向切面编程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring的3种切入点(Pointcut)实现

上节讲过,Pointcut是Join Point的集合,它是程序中需要注入Advice的位置的集合。Spring主要提供了3种切入点(Pointcut)的实现:静态切入点、动态切入点和自定义切入点,下面分别进行讲解。

1 静态切入点

静态切入点只限于给定的方法和目标类,而不考虑方法 的参数。Spring在调用静态切入点时只在第一次的时候计算静态切入点的位置,然后把它缓存起来,以后就不需要再进行计算。使用 org.springframework.aop.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>

</property>

</bean>

代码说明:

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

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

2 动态切入点

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

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

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

3 自定义切入点

因为Spring中的切入点是Java类,而不是语言特性(如AspectJ),因此可以定义自定义切入点。因为AOP还没有完全成熟,Spring提供的文档在这方面也没有提供更详细的解释,所以这里将不再对动态切入点和自定义切入点进行更加详细的介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值