`
y8820960
  • 浏览: 112953 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

spring execution 表达式

    博客分类:
  • j2ee
 
阅读更多

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对象可以在通知体内访问到的部分。
分享到:
评论

相关推荐

    execution表达式&切入点表达式.txt

    在使用spring框架配置AOP的时候,不管是通过XML配置文件还是注解的方式都需要定义pointcut"切入点

    Spring中的AOP不生效

    java中Spring配置的AOP切面不生效的解决方案

    SpringBoot下的SpringAOP-day04-源代码

    SpringBoot下的Spring——DAY04——动态代理总结、AOP、自定义...2.5.3 execution表达式 2.6 按照自定义注解进行拦截 2.6.1 自定义注解 2.6.2 切入点表达式写法 2.6.3 在service层实现类UserServiceImpl的addUser()方法

    Spring AOP配置源码

    <aop:pointcut expression="execution(* com.spring.service..*(..))" id="pointCut"/>声明一个切入点,注意execution表达式的写法 <aop:before method="before" pointcut-ref="pointCut"/> aop前置通知 ...

    SpringAOP的注解配置

    SpringAOP的注解配置完成切面的编程,完成execution,annotation两种表达式的实例Ddemo

    Spring.3.x企业应用开发实战(完整版).part2

    1.5.2 Spring表达式语言 1.5.3 可通过Java类提供IoC配置信息 1.5.4 通用类型转换系统和属性格式化系统 1.5.5 数据访问层新增OXM功能 1.5.6 Web层的增强 1.5.7 其他 1.6 Spring对Java版本的要求 1.7 如何获取Spring ...

    Spring3.x企业应用开发实战(完整版) part1

    1.5.2 Spring表达式语言 1.5.3 可通过Java类提供IoC配置信息 1.5.4 通用类型转换系统和属性格式化系统 1.5.5 数据访问层新增OXM功能 1.5.6 Web层的增强 1.5.7 其他 1.6 Spring对Java版本的要求 1.7 如何获取Spring ...

    SpringAOP实现.docx

    1、execution()::表达式主体。 2、第一个号:表示返回类型, 号表示所有的类型。 3、包名:表示需要拦截的包名,后面的两个句点表示当前包和当前包的所有子包,com.sample.service包、子孙包下所有类的方法。 4、...

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

    切入点指示符用来指示切入点表达式目的,,在Spring AOP中目前只有执行方法这一个连接点,Spring AOP支持的AspectJ切入点指示符如下: execution:用于匹配方法执行的连接点; within:用于匹配指定类型内的方法执行...

    Spring @Aspect注解

    Spring boot @Aspect简介使用场景列子1 (演示基本过程切点表达式切点复合运算切点匹配方法通知注解切面类执行顺序 简介 在 Spring实现 AOP面向切面编程, 是通过 @Aspect注解来实现切面的 使用场景 常见用于记录日志,...

    Spring AOP demo

    -- 配置切点表达式 --> <aop:pointcut id="pointcut1" expression="execution(public void com.jas.aop.bean.PersonImpl.sayHello())"/> <aop:pointcut id="pointcut2" expression="execution(public void ...

    ExpressionReflect:提供了不使用Reflection.Emit而仅使用反射来“编译”代表的表达式的功能

    表达反映 为什么? 提供了不使用Reflection.Emit而仅使用反射... 与已编译的表达式相比,这非常慢,因此只能与简单的表达式一起使用。 用法 用法很简单。 它只是表达式的扩展方法。 Expression < Func>> expression =

Global site tag (gtag.js) - Google Analytics