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提供的文档在这方面也没有提供更详细的解释,所以这里将不再对动态切入点和自定义切入点进行更加详细的介绍。
分享到:
相关推荐
在Spring框架中,切入点(pointcut)表达式是AOP(面向切面编程)的核心组成部分,用于定义关注点的精确位置,比如哪些方法应该被拦截。切入点表达式是基于AspectJ语法的,允许开发者精确地指定要拦截的方法。下面将详细...
在这篇文章中,我们将深入探讨Spring中的切入点(Pointcut)概念,它是AOP的关键组成部分。 首先,我们要明白什么是AOP。AOP是一种编程范式,它允许程序员定义“方面”——关注点的模块化,这些关注点是跨越多个...
Spring AOP通过使用切入点(Pointcut)和通知(Advice)来实现这一目标。切入点是定义关注点何时触发的表达式,而通知则是实际执行的动作。 Spring AOP目前只支持方法执行这个连接点,下面我们将详细解析Spring AOP...
在本篇内容中,我们将深入探讨Spring框架中的一个重要概念——AspectJ切入点语法,这是Spring AOP(面向切面编程)的核心部分。通过学习这一章节,您可以掌握如何在Spring3中利用AspectJ的强大功能来实现更加灵活和...
3. 切入点(Pointcut):定义一组连接点,用于定位我们感兴趣的点。 4. 通知(Advice):在特定连接点上运行的代码,包括前置通知、后置通知、异常通知、最终通知和环绕通知。 5. 织入(Weaving):将切面与目标对象...
3. **切入点(Pointcut)**:切入点定义了通知执行的具体位置,可以是类或方法的名称,甚至可以用正则表达式指定。 4. **切面(Aspect)**:切面由通知和切入点组成,是关注点的模块化。 5. **引入(Introduction)**:...
开发者需要在`<aop:config>`标签内定义切面,包括切入点表达式(pointcut expression)和通知类型。虽然这种方式相对繁琐,但它提供了最大的灵活性,因为所有细节都可以在配置文件中控制。然而,随着注解驱动AOP的...
在J2EE应用程序开发中,拦截器(Interceptor)、切入点(Pointcut)和代理(Proxy)是Spring框架中的重要概念,它们对于实现灵活的控制流程、事务管理、日志记录等功能起到关键作用。以下是对这些概念的详细解释: ...
在Spring的配置文件中,可以定义`<aop:config>`、`<aop:aspect>`、`<aop:pointcut>`等元素来声明切面、切入点和通知。 在实际开发中,选择哪种实现方式取决于项目需求和目标对象的特点。接口代理和注解方式通常更易...
3. **基于XML配置的AOP**:在Spring的配置文件中,可以通过`<aop:config>`、`<aop:advisor>`、`<aop:pointcut>`等标签定义切面、通知和切入点。 ### 三、Spring AOP实战 1. **经典代理模式**:通过JDK动态代理或...
我们可以通过`@Pointcut`注解来声明一个切入点,并在其中编写正则表达式或使用Spring提供的`ExpressionPointcut`类来匹配方法。 接下来,Advisor是Spring AOP的重要组成部分,它结合了切入点和通知。Advisor是一个...
4. 切入点(Pointcut):切入点是匹配连接点的规则,定义了通知将在哪些连接点应用。可以使用表达式或者注解来定义切入点。 5. 引入(Introduction):引入允许我们向现有类添加新的方法或属性,而不修改其源代码。...
- **切入点(Pointcut)**:匹配连接点的表达式,用于指定通知应用的具体位置。 - **织入(Weaving)**:将切面与应用程序的其他部分结合在一起的过程,可以发生在编译时、类加载时或运行时。 ### 2. Spring AOP的...
在Spring中,我们可以通过定义切面(aspect)、通知(advice)和切入点(pointcut)来实现AOP。例如,我们可以通过定义一个事务切面来确保在执行数据库操作时,如果出现异常则回滚事务。 数据访问方面,Spring3提供...
2. XML配置的切面:在Spring的XML配置文件中,使用`<aop:config>`标签定义切面,`<aop:advisor>`标签定义通知,以及`<aop:pointcut>`标签定义切入点。 3. 自动代理:Spring AOP可以自动创建代理来拦截目标对象的...
1. **确认是否正确配置了AOP切面**:检查AOP配置文件或类中的所有配置项是否设置正确,包括切入点表达式(Pointcut)、通知类型(Advice)等。 2. **检查Service类是否被Spring管理**:确保受影响的Service类已经...
总结,Spring AOP通过切面、切入点和通知等概念,提供了在不入侵原有代码的基础上,进行日志记录、事务管理、性能监控等多种跨切面操作的能力。在实际开发中,利用AOP可以有效地提高代码的复用性和模块化程度,降低...
下面我们将详细探讨Spring切入点表达式配置的过程以及相关标签的使用。 1. **** 标签: 这个标签是Spring AOP配置的根元素,用于声明AOP的相关配置。在`<aop:config>`中,我们可以定义多个切面、切入点和通知,以...
Spring AOP通过XML配置文件提供了灵活的方式来定义和管理切面、切入点和通知,使得我们可以轻松地在应用程序中实现横切关注点的解耦。了解和掌握Spring AOP的配置实现,有助于提升我们构建松散耦合、易于维护的系统...
本示例提供了一种通过注解和配置文件两种方式实现Spring AOP的方法。 首先,我们来详细讲解通过注解实现Spring AOP。在Spring中,我们可以使用`@Aspect`注解来定义一个切面,这个切面包含了多个通知(advice),即...