execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)
除了返回类型模式(上面代码片断中的ret-type-pattern),名字模式和参数模式以外,所有的部分都是可选的。 返回类型模式决定了方法的返回类型必须依次匹配一个连接点。 你会使用的最频繁的返回类型模式是 *,它代表了匹配任意的返回类型。 一个全称限定的类型名将只会匹配返回给定类型的方法。名字模式匹配的是方法名。 你可以使用 * 通配符作为所有或者部分命名模式。 参数模式稍微有点复杂:() 匹配了一个不接受任何参数的方法, 而 (..) 匹配了一个接受任意数量参数的方法(零或者更多)。 模式 (*) 匹配了一个接受一个任何类型的参数的方法。 模式 (*,String) 匹配了一个接受两个参数的方法,第一个可以是任意类型,第二个则必须是String类型。
下面给出一些常见切入点表达式的例子。
任意公共方法的执行:
execution(public * *(..))
任何一个以“set”开始的方法的执行:
execution(* set*(..))
AccountService 接口的任意方法的执行:
execution(* com.xyz.service.AccountService.*(..))
定义在service包里的任意方法的执行:
execution(* com.xyz.service.*.*(..))
定义在service包或者子包里的任意方法的执行:
execution(* com.xyz.service..*.*(..))
在service包里的任意连接点(在Spring AOP中只是方法执行) :
within(com.xyz.service.*)
在service包或者子包里的任意连接点(在Spring AOP中只是方法执行) :
within(com.xyz.service..*)
实现了 AccountService 接口的代理对象的任意连接点(在Spring AOP中只是方法执行) :
this(com.xyz.service.AccountService)
'this'在binding form中用的更多:- 请常见以下讨论通知的章节中关于如何使得代理对象可以在通知体内访问到的部分。
实现了 AccountService 接口的目标对象的任意连接点(在Spring AOP中只是方法执行) :
target(com.xyz.service.AccountService)
'target'在binding form中用的更多:- 请常见以下讨论通知的章节中关于如何使得目标对象可以在通知体内访问到的部分。
任何一个只接受一个参数,且在运行时传入的参数实现了 Serializable 接口的连接点 (在Spring AOP中只是方法执行)
args(java.io.Serializable)
'args'在binding form中用的更多:- 请常见以下讨论通知的章节中关于如何使得方法参数可以在通知体内访问到的部分。 请注意在例子中给出的切入点不同于 execution(* *(java.io.Serializable)): args只有在动态运行时候传入参数是可序列化的(Serializable)才匹配,而execution 在传入参数的签名声明的类型实现了 Serializable 接口时候匹配。
有一个 @Transactional 注解的目标对象中的任意连接点(在Spring AOP中只是方法执行)
@target(org.springframework.transaction.annotation.Transactional)
'@target' 也可以在binding form中使用:请常见以下讨论通知的章节中关于如何使得annotation对象可以在通知体内访问到的部分。
任何一个目标对象声明的类型有一个 @Transactional 注解的连接点(在Spring AOP中只是方法执行)
@within(org.springframework.transaction.annotation.Transactional)
'@within'也可以在binding form中使用:- 请常见以下讨论通知的章节中关于如何使得annotation对象可以在通知体内访问到的部分。
任何一个执行的方法有一个 @Transactional annotation的连接点(在Spring AOP中只是方法执行)
@annotation(org.springframework.transaction.annotation.Transactional)
'@annotation' 也可以在binding form中使用:- 请常见以下讨论通知的章节中关于如何使得annotation对象可以在通知体内访问到的部分。
任何一个接受一个参数,并且传入的参数在运行时的类型实现了 @Classified annotation的连接点(在Spring AOP中只是方法执行)
@args(com.xyz.security.Classified)
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/terryzero/archive/2009/04/27/4128858.aspx
分享到:
相关推荐
本篇文章将详细讲解Spring AOP的实例,包括Pointcut和Advisor两个关键概念,同时结合源码和工具进行深入探讨。 首先,让我们了解什么是Spring AOP。AOP(Aspect-Oriented Programming)是一种编程范式,它允许...
<aop:before method="logBefore" pointcut="execution(* com.example.service.*.*(..))"/> </aop:aspect> </aop:config> ``` 3. **创建服务类**:定义一个被切面拦截的服务类,例如`UserService`,包含一个方法...
<aop:before method="logBefore" pointcut="execution(* com.example.service.*.*(..))" /> <aop:after-returning method="logAfterReturning" pointcut="execution(* com.example.service.*.*(..))" /> <aop:...
### Spring AOP面向方面编程原理:AOP概念详解 #### 一、引言 随着软件系统的日益复杂,传统的面向对象编程(OOP)逐渐暴露出难以应对某些横切关注点(cross-cutting concerns)的问题。为了解决这一挑战,面向方面编程...
<aop:pointcut id="yourPointcutId" expression="execution(* com.yourpackage..*(..))"/> <aop:before method="yourAdviceMethod" pointcut-ref="yourPointcutId"/> </aop:aspect> </aop:config> ``` - 同时...
<aop:before method="beforeAdvice" pointcut="execution(* com.example.service.*.*(..))"/> <aop:after-returning method="afterReturningAdvice" pointcut="execution(* com.example.service.*.*(..))"/> <aop...
1. **XML配置**:在Spring的配置文件中,可以通过<aop:config>标签来定义切面,<aop:pointcut>定义切点,<aop:advisor>或<aop:aspect>定义通知。例如: ```xml <aop:config> <aop:pointcut id="myPointcut" ...
Spring AOP,即Spring的面向切面编程模块,是Spring框架的重要组成部分,它允许开发者在不修改源代码的情况下,对程序进行横切关注点的处理,如日志、事务管理等。实现这一功能,主要依赖于三个核心的jar包:aop...
<aop:pointcut id="logPointCut" expression="execution(* com.controller.web.*.*(..)) or execution(* com.controller.web.*.*(..))"/> <!-- 定义切面 --> <aop:aspect ref="springAopLog"> <aop:before ...
<aop:pointcut id="serviceMethods" expression="execution(* com.example.service.*.*(..))" /> <aop:aspect id="loggingAspect" ref="loggingAspectBean"> <aop:after-returning method="logAfterServiceCall...
在IT行业中,Spring AOP(面向切面编程)是一种强大的工具,它允许我们在不修改代码的情况下,对应用程序的特定部分进行拦截和增强。这在性能监控、日志记录、事务管理等方面尤为有用。本篇文章将深入探讨如何使用...
Spring AOP,全称Aspect-Oriented Programming(面向切面编程),是Spring框架的重要组成部分,用于实现横切关注点的模块化。它允许开发者定义“切面”,将那些与业务逻辑无关,却为多个对象共有的行为(如日志、...
<aop:pointcut id="serviceMethods" expression="execution(* com.example.service.*.*(..))"/> <!-- 增加前置通知 --> <aop:before method="logBefore" pointcut-ref="serviceMethods"/> </aop:aspect> </aop:...
<aop:before method="logBefore" pointcut="execution(* com.example.service.*.*(..))"/> <!-- 后置通知 --> <aop:after method="logAfter" pointcut="execution(* com.example.service.*.*(..))"/> <!-- ...
- **SpringAOP.avi**:可能是一个视频教程,详细讲解了Spring AOP的概念和实践。 - **SpringAOP.doc**:可能是文档教程,包含了详细的步骤和示例代码。 - **SpringAOP_src.rar**:源代码示例,供你参考和实践。 - **...
<aop:before method="logBefore" pointcut="execution(* com.example.service.*.*(..))"/> </aop:aspect> </aop:aspect> ``` 这里,`loggingAspectBean`是切面类的bean引用,`logBefore`方法对应于`@Before`注解...
在本示例中,"springaop.zip" 包含了一个使用XML配置的Spring AOP应用实例,可以直接运行,配合相关的博客文章学习效果更佳。 在Spring AOP中,我们首先需要了解几个核心概念: 1. **切面(Aspect)**:切面是关注...
在Spring AOP中,切面由两个主要部分组成:通知(advice)和切点(pointcut)。 2. **通知(Advice)**:通知是在特定的连接点(join point)执行的代码,它可以是前置通知(before advice)、后置通知(after ...
<aop:before method="logBefore" pointcut="execution(* com.example.service.*.*(..))"/> <aop:after method="logAfter" pointcut="execution(* com.example.service.*.*(..))"/> </aop:aspect> </aop:config> ...
在Spring框架中,AOP(面向切面编程)是一种强大的工具,它允许程序员将关注点分离,例如日志记录、事务管理、权限检查等,从核心业务逻辑中解耦出来。本篇主要探讨的是如何利用Spring AOP的注解来实现这些功能,...