pointcut 切面表达式 切入点表达式

下面给出一些常见切入点表达式的例子。

  • 任意公共方法的执行:

    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‘

    来源: http://www.blogjava.net/supercrsky/articles/174368.html

来自为知笔记(Wiz)

时间: 2024-12-13 16:37:03

pointcut 切面表达式 切入点表达式的相关文章

框架 day37 Spring3,AOP,代理模式(动态/CGLIB/工厂bean),传统AOP,AspectJ框架(基于xml/注解),切入点表达式,jdbcTemplate

1     AOP 1.1   什么是AOP 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型.利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率. * AOP采取横向抽取机制,取代了传统纵向继承体系

Spring(三)--AOP【面向切面编程】、通知类型及使用、切入点表达式

1.概念:Aspect Oriented Programming 面向切面编程 在方法的前后添加方法 2.作用:本质上来说是一种简化代码的方式 继承机制 封装方法 动态代理 -- 3.情景举例 ①数学计算器接口[MathCalculator] int add(int i,int j); int sub(int i,int j); int mul(int i, int j); int div(int i,int j); 因为后面的通知方法需要返回值,所以在这里类型声明为 int 类型 public

Spring切入点表达式常用写法

自从使用AspectJ风格切面配置,使得Spring的切面配置大大简化,但是AspectJ是另外一个开源项目,其规则表达式的语法也稍稍有些怪异. 下面给出一些常见示例的写法: 比如,下面是一个对Service包上所有方法的切面配置 <aop:config> <aop:pointcut id="serviceOperation" expression="execution(* *..service*..*(..))"/> <aop:adv

SpringAop_切入点表达式

  (..) 所有的方法 任意的参数,  com.spring..*   子包     例子: 前提 需要导入包:   commons-logging.jarspring.jarcglib-nodep-2.1_3.jaraspectjrt.jaraspectjweaver.jar       ApplicationContext.xml   <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&q

AOP实现日志打印 基于xml配置的AOP实现 切入点表达式

前置通知,后置通知,异常通知,返回通知 使用注解需要加入 在xml中加入  <aop:aspectj-autoproxy></aop:aspectj-autoproxy> 环绕通知(跟以上结果一样)  需要有返回值return rs: 基于xml配置的AOP实现(上面的注解全去掉,配置以下) ①切入点表达式的语法格式[参见第5章AOP细节] execution([权限修饰符] [返回值类型] [简单类名/全类名] [方法名]([参数列表])) 参见第5章AOP细节:演示验证 1.任

切入点表达式解析

先来看看这个spring的配置文件的配置: <!-- 事务管理器 -->  <bean id="transactionManager"   class="org.springframework.orm.hibernate3.HibernateTransactionManager">   <property name="sessionFactory" ref="sessionFactory" /&g

007 重用切入点表达式

一 . 概述 在前面的一节中,我们介绍了切入点表达式的书写方式. 但是一个通知后面需要加上一个切入点表达式,这样就会造成我们需要重复书写大量的切入点表达式. 因此,重用切入点表达式的需求就出现了. spring为我们提供这一实现. 二 .简单的例子 @Aspect public class MyAspect { @Pointcut("execution(* com.trek.aspect.RealSubject.test(..))") public void exp() {} @Bef

【Spring AOP】切入点表达式(四)

一.切入点指示符 切入点指示符用来指示切入点表达式目的,在Spring AOP中目前只有执行方法这一个连接点,Spring AOP支持的AspectJ切入点指示符如下: execution:用于匹配方法执行的连接点: within:用于匹配指定的类及其子类中的所有方法. this:匹配可以向上转型为this指定的类型的代理对象中的所有方法. target:匹配可以向上转型为target指定的类型的目标对象中的所有方法. args:用于匹配运行时传入的参数列表的类型为指定的参数列表类型的方法: @

必备技能:spring aop 切入点表达式,你都会么?

本文主要介绍spring aop中9种切入点表达式的写法 execute within this target args @target @within @annotation @args 1.execute表达式 拦截任意公共方法 execution(public * *(..)) 拦截以set开头的任意方法 execution(* set*(..)) 拦截类或者接口中的方法 execution(* com.xyz.service.AccountService.*(..)) 拦截Account