`

AspectJ Pointcut Expression

阅读更多

抄的,同一篇文章被大家抄来抄去,找不到原作者了,没法给链接,见谅

 

execution([modifiers-pattern] return-type-pattern [declaring-type-pattern] name-pattern(param-pattern)[throws-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)
分享到:
评论

相关推荐

    Aspectj1.6的jar包

    - **定义切入点**: 使用AspectJ的表达式语言(AspectJ Pointcut Expression Language, PEL)来指定匹配的连接点。 - **织入切面**: 可以通过`<aspectj>`标签在Maven或Gradle构建文件中配置织入方式。 - **运行时...

    spring-aspectj-ltw-xml-based-demo

    在XML配置中,我们可以使用AspectJ表达式语言(AspectJ Pointcut Expression Language, AOP EL)来定义切点。 3. **通知(Advice)**:通知是在切点匹配时执行的代码,包括前置通知、后置通知、异常通知、环绕通知...

    Spring AOP 的实现例子(基于XML配置实现)

    我们可以通过`pointcut`属性来定义连接点表达式,它使用Spring的切入点表达式语言(Pointcut Expression Language,PEL)或者AspectJ的切入点表达式语言(AspectJ Pointcut Expression Language,AJ PEL)。...

    spring3.0.5的aop使用

    为了定义切点,Spring提供了强大的表达式语言——AspectJ Pointcut Expression Language (AOPEL)。例如,`execution(* com.example.service.*.*(..))`匹配com.example.service包下的所有类的所有方法。 创建一个切...

    aspectj-1.9.4的压缩包.rar

    aspectj-1.9.4.jar的资源下载,用于Spring中的关于aspect的注释,本来想在官网上下载,但是不知道怎么的,官网的反应炒鸡慢。,找了一大圈子,突然发现自己电脑上有,所以打算分享给大家

    org.aspectj.matcher.jar

    Java应用开发必不可少的jar包 org.aspectj.matcher.jar

    aspectj各版本jar包

    aspectj-1.6至1.8各发布版本jar包,解决错误日志:error the @annotation pointcut expression is only supported at Java 5 compliance level or above

    aspectj-1.8.5.jar

    jdk1.7 spring aop报错 请下载aspectj-1.8.5.jar 更换低版本程序,再不行下载最新的aspectjweaver.jar

    aspectj-1.9.6.jar

    5. **强大的切点表达式**:AspectJ的切点表达式语言(Pointcut Expression Language, PEL)允许精确地指定切点,可以根据包名、类名、方法名、参数类型等条件进行匹配。 6. **编织增强(Advising Enhancements)**...

    aspectj的有关知识点

    AspectJ 还提供了切入点表达式(Pointcut Expression),这是 Pointcut 的一种更高级形式,可以结合方法签名、类型信息和注解来指定连接点。例如,`execution(* com.example.service.*.*(..))` 将匹配 `...

    aspectj jar

    可以使用表达式语言(Pointcut Expression Language, PEL)来精确指定,如`execution(* com.example.service.*.*(..))`表示匹配com.example.service包下的所有方法。 5. 注册切面:在Spring配置中注册切面类,使得...

    Spring AOP注解案例及基本原理详解

    Spring AOP中,切入点可以通过AspectJ pointcut expression language来描述。 Advice: 通知是针对切入点的横切逻辑,可以包含“around”、“before”和“after”等不同类型的通知。通知的作用点如其命名:before是在...

    AspectJ HelloWorld程序

    AspectJ 使用切入点表达式(Pointcut Expression)来确定哪些连接点应该应用通知。 5. **切入点表达式(Pointcut Expression)**:切入点表达式是用于定义通知应何时触发的条件语句。它可以基于方法名、包名、注解...

    AspectJ的jar包

    在Java项目中引入AspectJ的jar包,开发者可以编写切面(Aspect),定义切入点表达式(Pointcut Expression)来指定代码执行的特定位置,以及通知(Advice)来定义在这些位置执行的行为。AspectJ提供了五种类型的通知...

    spring和aspectj的aop实验

    相比于Spring的AOP,AspectJ提供了更细粒度的控制,可以精确地指定切入点表达式(Pointcut Expression),甚至可以在方法调用、字段访问等更底层的级别上应用切面。 4. **实验步骤** - **创建切面类**:在AspectJ...

    aspectj的jar spring使用aop需要的jar

    在AspectJ中,你可以使用表达式语言(Pointcut Expression Language, PEL)来精确地指定切入点。 8. **类型匹配(Type Matching)**:AspectJ的强项之一是类型匹配能力,它允许你基于类或接口来定义切入点,而不...

    Spring的AOP依赖包-AspectJ

    引入AspectJ的依赖包,可以使用AspectJ的表达式语言(Pointcut Expression Language, PEL)来精确地定义切点。例如,`execution(* com.example.service.*(..))`表示匹配com.example.service包下的所有方法。 ...

    aspectjlib-1.5.0.jar.zip

    3. **切点表达式**:AspectJ的切点表达式语言(Pointcut Expression Language, PEL)允许精确地定义切点,例如通过方法签名、类名或注解来匹配代码位置。 4. **通知类型**:包括前通知(Before)、后通知(After)、...

    动手写一个AspectJ的gradle插件

    AspectJ的主要概念包括切面(Aspect)、切点(Join Point)、通知(Advice)和切入点表达式(Pointcut Expression)。切面封装了关注点,切点是程序执行中的特定位置,通知是在特定切点执行的代码,而切入点表达式...

    aspectj-1.6.9.jar

    4. 切入点表达式(Pointcut Expression):定义一组连接点的规则,用于指定通知的触发条件。 5. 织入(Weaving):将切面与其他应用程序代码结合在一起的过程,可以发生在编译时或运行时。 描述中提到的...

Global site tag (gtag.js) - Google Analytics