`
expressren_2015
  • 浏览: 2014 次
社区版块
存档分类
最新评论

AOP execution

 
阅读更多

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


引用
http://blog.csdn.net/bobiy45785/article/details/6773947  小小刚
分享到:
评论

相关推荐

    Spring中的AOP不生效

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

    SpringBoot AOP切面类三种写法(源代码)

    public static final String POINT_CUT = "execution(* com.bjpowernode.springboot03aop.domain.Man.*(..))"; @Before(value=POINT_CUT) 二、AOP开发 2.1 pom.xml 2.2 javabean 2.3 切面类(不一样的地方

    AOP_execution.zip

    Java 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前置通知 <aop:after ...

    PHP的AOP库Go!.zip

    * @Before("execution(public Example->*(*))") */ public function beforeMethodExecution(MethodInvocation $invocation) { $obj = $invocation->getThis(); echo 'Calling Before Interceptor for method: ...

    SpringAOP的注解配置

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

    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 ...

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

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

    基于java的企业级应用开发:AspectJ开发.ppt

    <aop:config> <aop:aspect id="aspect" ref="myAspect"> <aop:pointcut expression="execution(* com.itheima.jdk.*.*(..))“ id="myPointCut" /> <aop:before method="myBefore" pointcut-ref="myPointCut" /> <aop...

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

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

    关于Spring AOP,除了动态代理、CGLIB,你还知道什么?

    Spring 作为 Java 中最流行的框架...方法调用执行(Method Call Execution):某个方法内部开始执行的时点。 方法调用是在调用对象上的执行点,方法调用执行是在被调用对象的方法开始执行点。 构造方法调用(Constructo

    SpringAOP实现.docx

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

    spring-boot-execution-metric:测量关键代码块的执行时间,并将统计信息公开为执行器指标

    弹簧启动执行量度 测量关键代码块的执行时间,并将统计信息公开为执行器指标 提供一种轻量级的方法来测量(选定的)关键代码执行(例如...与AOP /注释一起使用 仅公开指标 @ExecutionMetric("some-action") public vo

    struts2.3+hibernate3.6+spring3.1整合的纯xml配置的小项目

    expression="execution(* x.y.service.*Service.*(..))" /> <aop:pointcut id="noTxServiceOperation" expression="execution(* x.y.service.ddl.DefaultDdlManager.*(..))" /> <aop:advisor pointcut-ref=...

    Spring @Aspect注解

    在 Spring实现 AOP面向切面编程, 是通过 @Aspect注解来实现切面的 使用场景 常见用于记录日志, 异常集中处理, 权限验证以及 Web参数有效验证等等 列子1 (演示基本过程 @Aspect @Component public class TestAspect ...

    ssh框架在application.xml中配置数据源所需jar

    <!-- - Application context definition for JPetStore's business layer. ... <aop:advisor pointcut="execution(* com.longxian.drp.manager.*.*(..))" advice-ref="txAdvice"/> </aop:config> </beans>

    springmvc-ibatis

    <aop:pointcut expression="execution(* com.org.service.*.*(..))" id="bussinessService" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="bussinessService"/> </aop:config> <!-- 配置那个类那个...

    Maven拆分代码.zip

    <!--配置连接池--> <!--配置生产SqlSession对象的... <aop:pointcut id="pointcut" expression="execution(* com.itheima.service.impl.*.*(..))"/> <aop:advisor advice-ref="advice" pointcut-ref=

    SpringMVC+Hibernate全注解整合

    <aop:pointcut expression="execution(public * com.org.service.*.*(..))" id="bussinessService" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="bussinessService" /> </aop:config> <!-- 配置...

Global site tag (gtag.js) - Google Analytics