`

Spring Aop配置时的切入点表达式

 
阅读更多

Some examples of common pointcut expressions are given below.

  • the execution of any public method:

  • execution(public * *(..))
  • the execution of any method with a name beginning with "set":

  • execution(* set*(..))
  • the execution of any method defined by the AccountService interface:

  • execution(* com.xyz.service.AccountService.*(..))
  • the execution of any method defined in the service package:

  • execution(* com.xyz.service.*.*(..))
  • the execution of any method defined in the service package or a sub-package:

  • execution(* com.xyz.service..*.*(..))
  • any join point (method execution only in Spring AOP) within the service package:

  • within(com.xyz.service.*)
  • any join point (method execution only in Spring AOP) within the service package or a sub-package:

    within(com.xyz.service..*)
  • any join point (method execution only in Spring AOP) where the proxy implements the AccountService interface:

    this(com.xyz.service.AccountService)

     

    'this' is more commonly used in a binding form :- see the following section on advice for how to make the proxy object available in the advice body.

     

     

  • any join point (method execution only in Spring AOP) where the target object implements the AccountService interface:

    target(com.xyz.service.AccountService)

     

    'target' is more commonly used in a binding form :- see the following section on advice for how to make the target object available in the advice body.

     

     

  • any join point (method execution only in Spring AOP) which takes a single parameter, and where the argument passed at runtime is Serializable:

    args(java.io.Serializable)

    'args' is more commonly used in a binding form :- see the following section on advice for how to make the method arguments available in the advice body.

    Note that the pointcut given in this example is different to execution(* *(java.io.Serializable)): the args version matches if the argument passed at runtime is Serializable, the execution version matches if the method signature declares a single parameter of type Serializable.

  • any join point (method execution only in Spring AOP) where the target object has an @Transactional annotation:

    @target(org.springframework.transaction.annotation.Transactional)

     

    '@target' can also be used in a binding form :- see the following section on advice for how to make the annotation object available in the advice body.

     

     

  • any join point (method execution only in Spring AOP) where the declared type of the target object has an @Transactional annotation:

    @within(org.springframework.transaction.annotation.Transactional)

     

    '@within' can also be used in a binding form :- see the following section on advice for how to make the annotation object available in the advice body.

     

     

  • any join point (method execution only in Spring AOP) where the executing method has an @Transactional annotation:

    @annotation(org.springframework.transaction.annotation.Transactional)

     

    '@annotation' can also be used in a binding form :- see the following section on advice for how to make the annotation object available in the advice body.

     

     

  • any join point (method execution only in Spring AOP) which takes a single parameter, and where the runtime type of the argument passed has the @Classified annotation:

    @args(com.xyz.security.Classified)

     

    '@args' can also be used in a binding form :- see the following section on advice for how to make the annotation object(s) available in the advice body.

     

     

  • any join point (method execution only in Spring AOP) on a Spring bean named 'tradeService':

    bean(tradeService)
  • any join point (method execution only in Spring AOP) on Spring beans having names that match the wildcard expression '*Service':

    bean(*Service)

对应的中文:

任意公共方法的执行: 
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)

分享到:
评论

相关推荐

    springaop中切入点表达式完整示例代码

    在Spring AOP(面向切面编程)中,切入点表达式是定义通知(advice)执行时机的关键元素。本文将深入探讨9种不同的切入点表达式及其用法,通过实际的示例代码来帮助理解它们的工作原理。 1. **execute()**: `...

    spring的AOP和AOP相关概念切入点表达式写法详细说明.emmx

    使用mindmaster打开

    详解Spring 框架中切入点 pointcut 表达式的常用写法

    总之,Spring框架的切入点表达式是实现AOP功能的关键,通过它们可以灵活地定义拦截的范围和规则,实现如事务管理、日志记录等横切关注点。通过熟练掌握切入点表达式的使用,可以提高代码的模块化和可维护性。

    springAop的配置实现

    - `<aop:pointcut>`:定义切入点表达式,例如`execution(* com.example.service.*.*(..))`表示匹配com.example.service包下的所有方法。 - `<aop:advisor>`:定义通知和切入点的关联,指定何时何地执行通知。 - `...

    Spring AOP 16道面试题及答案.docx

    例如,切入点表达式`execution(* EmployeeManager.getEmployeeById(...))`表示匹配所有在`EmployeeManager`接口中名为`getEmployeeById`的方法执行。 总的来说,Spring AOP通过代理和通知机制,实现了横切关注点的...

    spring注解aop配置详解

    在传统的AOP配置中,我们需要定义切入点表达式和通知(advice)在XML配置文件中。然而,使用注解可以让这些配置变得更加直观和易于维护。例如,我们可以使用`@Aspect`注解来定义一个切面类,`@Before`、`@After`、`@...

    简单spring aop 例子

    在实际项目中,你可以根据需求定义不同的通知类型,如`@After`、`@Around`、`@AfterReturning`和`@AfterThrowing`,以及复杂的切入点表达式。通过这些,你可以实现更精细的控制,如只对特定方法、异常或返回值进行...

    Spring AOP面向方面编程原理:AOP概念

    4. **丰富的切入点表达式语言**:Spring AOP支持使用SpEL(Spring Expression Language)来定义复杂的切入点表达式,这让开发者能够更加灵活地控制通知的触发条件。 #### 四、Spring AOP的实现示例 接下来,我们...

    springaop.zip

    切入点表达式匹配连接点,决定通知何时执行。 5. **代理(Proxy)**:Spring AOP通过动态代理机制创建目标对象的代理对象,代理对象负责在方法调用前后执行通知。 在XML配置中,我们通常会定义一个`<aop:config>`...

    SpringAOP的注解配置

    Spring AOP,全称Aspect-Oriented Programming(面向切面编程),是...在`myaop`项目中,你可以找到具体的示例代码,包括切面类、切入点表达式以及相应的注解使用,通过这些示例可以更深入地理解Spring AOP的注解配置。

    Spring AOP 所有切入点指示符详解.docx

    在编写切入点表达式时,我们需要使用AspectJ的类型匹配语法,如`*`代表任意字符,`..`匹配任意数量的子包或参数,`+`匹配指定类型的子类型。这些通配符使得切入点表达式具有很高的灵活性,能够精确或广泛地定位到...

    Spring AOP实现机制

    - **切入点(Pointcut)**:匹配连接点的表达式,用于指定通知应用的具体位置。 - **织入(Weaving)**:将切面与应用程序的其他部分结合在一起的过程,可以发生在编译时、类加载时或运行时。 ### 2. Spring AOP的...

    Spring AOP简单demo

    2. **XML配置驱动**:在Spring配置文件中定义切面、通知和切入点表达式。 **Spring AOP示例** 以入门级的`advice`为例,我们可能有一个简单的日志切面: ```java @Aspect @Component public class LoggingAspect ...

    切入点表达式

    切入点表达式是面向切面编程(AOP)中不可或缺的一部分,尤其在AspectJ和Spring框架中,用于精确地定义何时及何处应用切面。本文将深入探讨AspectJ的切入点表达式,包括其语法结构和常见用法。 切入点表达式的核心...

    spring 配置aop时需要的jar包

    2. 开启AOP代理:在Spring配置文件中,通过`<aop:config>`标签开启AOP支持,并可以定义切入点表达式(pointcut expression)和通知类型。 3. 定义切面:你可以使用Spring的`@Aspect`注解来定义一个切面类,然后在类...

    Spring AOP 配置小节

    切入点表达式是AOP的核心,它定义了哪些方法会被通知拦截。基本语法包括: - `execution()`:匹配方法执行。 - `this()`:匹配目标对象类型。 - `target()`:匹配目标bean的类型。 - `args()`:匹配方法参数。 - `@...

    SpringAop xml方式配置通知

    -- 定义切入点表达式 --> <aop:pointcut id="myPointcut" expression="execution(* com.example.service.*.*(..))"/> <!-- 配置通知 --> <aop:before method="beforeMethod" pointcut-ref="myPointcut"/> <aop...

    spring aop 五个依赖jar

    AspectJ是一个强大的、成熟的AOP框架,它扩展了Java语言,允许开发者定义切面、切入点表达式和通知。在Spring AOP中,你可以选择使用AspectJ的编译时或运行时织入,以实现更细粒度的控制和更高的性能。 2. **...

    spring-aop标签和配置文件两种方式实例

    `<aop:before>`和`<aop:after>`标签分别定义了在方法执行前和执行后调用的advice(通知),pointcut(切入点表达式)定义了这些通知应该应用到哪些方法上。 接下来,我们来看看使用AOP标签的方式。从Spring 3.0开始...

    spring AOP的运用

    1. 当Spring容器启动时,会扫描所有带有`@Aspect`注解的类,并将其转换为对应的`AspectJExpressionPointcut`对象,这是Spring AOP的核心类,用于匹配切入点表达式。 2. 当遇到一个切入点匹配的连接点时,Spring会...

Global site tag (gtag.js) - Google Analytics