`
gapele
  • 浏览: 56661 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

AspectJ风格的Aop切点表达式

 
阅读更多
execution(*com.aptech.jb.epet.dao.hibimpl.*.*(..))

 

 

这样写应该就可以了,这是com.aptech.jb.epet.dao.hibimpl 包下所有的类的所有方法。

 

第一个*代表所有的返回值类型

 

第二个*代表所有的类

 

第三个*代表类所有方法

 

最后一个..代表所有的参数。

 

 

Spring AOP 用户可能会经常使用 execution切入点指示符。执行表达式的格式如下:
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern)
          throws-pattern?)
除了返回类型模式(上面代码片断中的ret-type-pattern),名字模式和参数模式以外, 所有的部分都是可选的。返回类型模式决定了方法的返回类型必须依次匹配一个连接点。 你会使用的最频繁的返回类型模式是*,它代表了匹配任意的返回类型。 一个全限定的类型名将只会匹配返回给定类型的方法。名字模式匹配的是方法名。 你可以使用*通配符作为所有或者部分命名模式。 参数模式稍微有点复杂:()匹配了一个不接受任何参数的方法, 而(..)匹配了一个接受任意数量参数的方法(零或者更多)。 模式(*)匹配了一个接受一个任何类型的参数的方法。 模式(*,String)匹配了一个接受两个参数的方法,第一个可以是任意类型, 第二个则必须是String类型。更多的信息请参阅AspectJ编程指南中 语言语义的部分。
下面给出一些通用切入点表达式的例子。
  • 任意公共方法的执行:
    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'在绑定表单中更加常用:- 请参见后面的通知一节中了解如何使得代理对象在通知体内可用。
     
  • 实现AccountService接口的目标对象的任意连接点 (在Spring AOP中只是方法执行):
    target(com.xyz.service.AccountService)
    'target'在绑定表单中更加常用:- 请参见后面的通知一节中了解如何使得目标对象在通知体内可用。
     
  • 任何一个只接受一个参数,并且运行时所传入的参数是Serializable 接口的连接点(在Spring AOP中只是方法执行)
    args(java.io.Serializable)
    'args'在绑定表单中更加常用:- 请参见后面的通知一节中了解如何使得方法参数在通知体内可用。
    请注意在例子中给出的切入点不同于 execution(* *(java.io.Serializable)): args版本只有在动态运行时候传入参数是Serializable时才匹配,而execution版本在方法签名中声明只有一个 Serializable类型的参数时候匹配。
  • 目标对象中有一个 @Transactional 注解的任意连接点 (在Spring AOP中只是方法执行)
    @target(org.springframework.transaction.annotation.Transactional)
    '@target'在绑定表单中更加常用:- 请参见后面的通知一节中了解如何使得注解对象在通知体内可用。
     
  • 任何一个目标对象声明的类型有一个 @Transactional 注解的连接点 (在Spring AOP中只是方法执行):
    @within(org.springframework.transaction.annotation.Transactional)
    '@within'在绑定表单中更加常用:- 请参见后面的通知一节中了解如何使得注解对象在通知体内可用。
     
  • 任何一个执行的方法有一个 @Transactional 注解的连接点 (在Spring AOP中只是方法执行)
    @annotation(org.springframework.transaction.annotation.Transactional)
    '@annotation'在绑定表单中更加常用:- 请参见后面的通知一节中了解如何使得注解对象在通知体内可用。
     
  • 任何一个只接受一个参数,并且运行时所传入的参数类型具有@Classified 注解的连接点(在Spring AOP中只是方法执行)
    @args(com.xyz.security.Classified)
    '@args'在绑定表单中更加常用:- 请参见后面的通知一节中了解如何使得注解对象在通知体内可用。
     
  • 任何一个在名为'tradeService'的Spring bean之上的连接点 (在Spring AOP中只是方法执行):
    bean(tradeService)
  • 任何一个在名字匹配通配符表达式'*Service'的Spring bean之上的连接点 (在Spring AOP中只是方法执行):
    bean(*Service)
 
分享到:
评论

相关推荐

    Spring 使用AspectJ 实现 AOP(基于xml文件、基于注解)

    2. **定义切点表达式**: 在XML配置文件中,我们使用`<aop:config>`标签定义切点表达式,这些表达式匹配要拦截的方法。 3. **关联通知与切点**: 使用`<aop:pointcut>`定义切点,并通过`<aop:advisor>`将通知与切点...

    Spring框架(6)AspectJ实现AOP共7页.pd

    切点表达式是AspectJ的关键概念,它使用一种专用的语言来指定哪些方法将匹配切点。例如,"execution(* com.example.service.*.*(..))"表示匹配com.example.service包下的所有类的所有方法。 在Spring中结合AspectJ...

    spring对AOP的支持(使用AspectJ进行AOP演示)

    `execution(* com.example.service.*.*(..))` 是一个切点表达式,表示匹配 `com.example.service` 包下的所有类的所有方法。 为了启用 AspectJ 的支持,我们需要配置 Spring 容器。在 Spring 配置文件(如 ...

    @AspectJ配置Spring AOP,demo

    通过以上内容,我们可以理解如何使用@AspectJ配置Spring AOP,包括创建切面类、定义切点表达式、编写不同类型的通知,以及在Spring配置中启用和装配切面。实际操作中,你可以参考提供的资源文件进行学习和实践。

    征服Spring AOP—— @AspectJ

    2. `@Pointcut`:定义一个切点表达式,用于匹配特定的代码执行点,如方法调用、构造器调用等。 3. `@Before`:前置通知,方法在目标方法执行前被调用。 4. `@After`:后置通知,无论目标方法是否正常执行,都会在...

    Spring @AspectJ 实现AOP 入门例子

    本文将深入探讨如何使用Spring的@AspectJ注解来实现AOP,这是一个入门级别的教程,旨在帮助开发者理解并掌握这一重要概念。 **什么是AOP?** 面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式...

    Spring的AOP依赖包-AspectJ

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

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

    在Spring框架中,切入点(pointcut)表达式是AOP(面向切面编程)的核心组成部分,用于定义关注点的精确位置,比如哪些方法应该被拦截。切入点表达式是基于AspectJ语法的,允许开发者精确地指定要拦截的方法。下面将详细...

    Spring AOP之基于AspectJ注解总结与案例

    接着,我们可以使用前面提到的通知类型,比如`@Before`,`@After`等,结合切点表达式来定义何时执行通知。 ```java @Aspect public class LoggingAspect { @Before("execution(* com.example.service.*.*(..))") ...

    Andorid AspectJ 的demo

    在"PengTest"这个文件中,可能包含了具体的AspectJ切面示例代码,可能包括自定义的切面类、切点表达式以及对应的通知方法。分析这个示例可以帮助我们理解如何在实际项目中应用AspectJ,如何定义和配置切面,以及如何...

    【Spring AOP】@Aspect结合案例详解(二): @Pointcut使用@within和within

    上文我们已讲完五种通知Advice注解,所以从本文开始介绍@Pointcut切点表达式,虽然Spring AOP的切点表达式尚未 全部实现 @AspectJ 的切点指示符,但是也已经足够多和灵活,本文主要介绍@Pointcut切点表达式中的@...

    aspectJ与XML配置的AOP

    Spring AOP和AspectJ都支持基于方法签名、注解等条件的切入点表达式。切点是实际运行时满足切入点表达式的连接点,比如一个方法的执行。 **织入(Weaving)** 织入是将切面与目标对象结合的过程。Spring AOP在运行...

    android 实现AOP 使用Aspectj Kotlin版Demo.zip

    在这个类中,可以定义切点表达式(Pointcut),它定义了哪些方法会被拦截。例如,你可以定义一个切点匹配所有View的onClick方法。 3. 定义通知:使用`@Before`, `@After`, `@Around`等注解定义不同的通知。在这个...

    AOP_execution.zip

    在Java中,通常使用Spring框架来实现AOP,而切点表达式则是由Spring的`@AspectJ`注解配合`@Pointcut`注解来定义的。`execution()`是Spring AOP中用于指定方法匹配规则的内置函数,用于定义执行点。 例如,描述中...

    day39-Spring 06-Spring的AOP:带有切点的切面

    而`DefaultPointcutAdvisor`和`AspectJExpressionPointcut`则用于管理和解析切点表达式。 5. **工具支持**:在实际开发中,IDE工具如IntelliJ IDEA和Eclipse提供了强大的AOP支持。它们可以帮助我们快速检查切点...

    aspectj-1.9.6.jar

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

    跟我学Spring3(6.5)AspectJ切入点语法详解

    AspectJ切入点语法主要由两部分组成:切点表达式(Pointcut Expression)和切点定义(Pointcut Declaration)。切点表达式是一种特殊的语言,用于精确地指定我们感兴趣的程序执行点。例如,我们可以使用`execution()...

    Spring AOP中定义切点的实现方法示例

    Spring AOP 中定义切点的实现方法示例 在 Spring 框架中,Aspect-Oriented Programming(面向切面编程)是一种非常重要的编程范式,它能够帮助开发者实现各种横切关注点的模块化。其中,定义切点是 AOP 中最为关键...

    Spring AOP + AspectJ in XML 配置示例

    在上述配置中,`myAspect`定义了一个切面,`pointcutExpression`指定了切点表达式,`aop:aspectj-autoproxy`会自动生成代理以应用切面。`aop:config`部分则配置了通知,`beforeAdvice`和`afterAdvice`分别对应前置和...

Global site tag (gtag.js) - Google Analytics