Spring AOP
用户可能会经常使用 execution
pointcut designator。执行表达式的格式如下:
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)
除了返回类型模式(上面代码片断
中的ret-type-pattern),名字模式和参数模式以外,所有的部分都是可选的。 返回类型模式决定了方法的返回类型必须依次匹配一个连接点。
你会使用的最频繁的返回类型模式是 *
,它代表了匹配任意的返回类型。
一个全称限定的类型名将只会匹配返回给定类型的方法。名字模式匹配的是方法名。 你可以使用 *
通配符作为所有或者部分命名模式。
参数模式稍微有点复杂:()
匹配了一个不接受任何参数的方法,
而 (..)
匹配了一个接受任意数量参数的方法(零或者更多)。 模式 (*)
匹配了一个接受一个任何类型的
参数的方法。 模式 (*,String)
匹配了一个接受两个参数的方法,第一个可以是任意类型,第二个则必须是String类型。
请参见AspectJ编程指南的 Language
Semantics
部分。
下面给出一些常见切入点表达式的
例子。
-
任意公共方法的执行:
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)
'@args'也可以在binding form中使用:-
请常见以下讨论通知的章节中关于如何使得annotation对象可以在通知体内访问到的部分。
分享到:
相关推荐
在使用spring框架配置AOP的时候,不管是通过XML配置文件还是注解的方式都需要定义pointcut"切入点
在Spring AOP中,SpEL可用于定义切面的切入点表达式,如`execution(* com.example.service.*.*(..))`,匹配com.example.service包下所有类的所有方法。 9. **SpEL表达式在Bean初始化和销毁中的应用** Bean的初始...
标题中的“在自定义Spring AOP中使用EL获取拦截方法的变量值”指的是在Spring的面向切面编程(AOP)中,通过Expression Language(EL,表达式语言)来访问被拦截方法的局部变量值。这通常涉及到Spring的代理机制、...
在Spring AOP中,Pointcut表达式通常使用AspectJ的表达式语法。这些表达式允许开发者指定何时执行AOP的增强功能。以下是一些基本的Pointcut表达式语法: - **execution()**:用于匹配方法执行。 - `execution(* ...
1. **确认是否正确配置了AOP切面**:检查AOP配置文件或类中的所有配置项是否设置正确,包括切入点表达式(Pointcut)、通知类型(Advice)等。 2. **检查Service类是否被Spring管理**:确保受影响的Service类已经...
在Spring框架中,切入点(pointcut)表达式是AOP(面向切面编程)的核心组成部分,用于定义关注点的精确位置,比如哪些方法应该被拦截。切入点表达式是基于AspectJ语法的,允许开发者精确地指定要拦截的方法。下面将详细...
在Spring AOP(面向切面编程)中,切入点表达式是定义通知(advice)执行时机的关键元素。本文将深入探讨9种不同的切入点表达式及其用法,通过实际的示例代码来帮助理解它们的工作原理。 1. **execute()**: `...
在Spring框架中,定时任务是通过Spring的TaskExecution和TaskScheduling模块来实现的,它提供了灵活的定时和任务执行机制。本篇文章将深入探讨如何动态地修改Spring定时器的cron表达式,以便任务能够根据业务需求...
SpringBoot下的Spring——DAY04——动态代理总结、AOP、自定义...2.5.3 execution表达式 2.6 按照自定义注解进行拦截 2.6.1 自定义注解 2.6.2 切入点表达式写法 2.6.3 在service层实现类UserServiceImpl的addUser()方法
在上面的代码中,我们使用了`@AfterReturning`注解来指定切面方法,`execution(* org.crazyit.app.service.impl.*.*(..))`是目标方法的 execution表达式,`args(arg0,arg1)`是args表达式,指定目标方法的参数类型和...
切入点表达式是面向切面编程(AOP)中不可或缺的一部分,尤其在AspectJ和Spring框架中,用于精确地定义何时及何处应用切面。本文将深入探讨AspectJ的切入点表达式,包括其语法结构和常见用法。 切入点表达式的核心...
【Spring AOP介绍1】 Spring AOP,全称为Spring面向切面编程,是Spring框架的重要组成部分,它提供了一种在不...无论是初学者还是中级开发者,深入理解Spring AOP和AspectJ Pointcut表达式都对提升编程技能大有裨益。
在Spring中,可以使用`@Pointcut`注解来定义切入点,并使用正则表达式或者Spring的表达式语言(SpEL)来指定匹配规则。 4. **关联切面和通知**:使用`@Before`, `@After`, 等注解直接在通知方法上,或者在`@Aspect`...
Spring使用表达式语言(如XPath)来定义切入点。 4. **连接点(Join Point)**:程序执行中的一个点,如方法的调用或字段的赋值。切入点表达式匹配连接点,决定通知何时执行。 5. **代理(Proxy)**:Spring AOP...
切入点表达式`execution(* com.example.service.*.*(..))`匹配`com.example.service`包下的所有方法。在`processResponse`方法中,我们可以访问`HttpServletResponse`并根据业务需求进行操作,如设置响应头、状态码...
3. **配置切点**:在切面类中,使用`@Pointcut`定义切点表达式,这可以匹配一组方法。在上面的例子中,我们定义了一个切点,匹配`com.example.service`包下的所有方法。 4. **使用代理**:Spring会根据需要自动创建...
切入点表达式`execution(* com.example.service.*.*(..))`表示拦截`com.example.service`包下的所有类的所有方法。 最后,`springTest`这个文件可能是包含了运行Spring AOP和IOC示例的项目。这个项目可能包含了...
`execution(* com.example.service.*.*(..))`是切点表达式,用于匹配特定的Java方法。在这个例子中,它匹配`com.example.service`包下的所有类的所有方法。 在Spring中,我们还需要启用注解驱动的AOP支持。这通常在...
10. **Spring AOP切点表达式**:Spring的AOP允许使用切点表达式来定义通知的执行时机,如`@After("execution(* com.example.service.*.*(..))"`表示在com.example.service包下的所有方法调用后执行通知。 11. **...
CVE-2022-22947是一种影响SpringCloud GateWay的远程代码执行漏洞,通过SpEL(Spring Expression Language)实现RCE(Remote Code Execution)。下面是关于该漏洞的详细分析和知识点总结。 一、漏洞概述 CVE-2022-...