`

Aspect call execution

阅读更多

  call execution 的指示符分别为 call Method-Signature )、 execution Method-Signature ),匹配方法签名的方法或构造函数的执行。 对于 call 来说,调用的连接点位于方法调用点的调用代码处;对于 execution 来说,执行的连接点位于方法执行的位置。也就是说, call execution 的重要区别在于它们传递了哪些类型给 AspectJ 编译器以用来与 aspect 进行链接。

        通常,我们在使用 call execution 时,从效果上来看并不会觉察出二者的区别。下面给出一个例子说明 call execution 的运行时机及区别。

     

public   class  A  {
    
public   void  foo(){
        System.out.println(
" A.foo() " );
    }
}

public   class  Main {
    
public   void  callFoo(A a){
        a.foo();
    }
    
public   static   void  main(String[] args) {    
        Main m 
=   new  Main();
        m.callFoo(
new  A());
    }
}


        1 )现在我看一下下面使用 call 的切面:

                        aspectj.png

 

   

           该切面定义了一个切入点 callA(Object o,Object t) ,其中 this (o) 表示将匹配的连接点的对象赋给 o target (t) 表示将匹配的连接点的目标对象赋给 t 。输出结果为:

 

           aspectj-3.png

        

        输出表明, this 的类(调用类)为 Main target 的类(目标类)为 A 我们再看一下 Main 类:

 

       aspectj-2.png


        在 AJDT 下,可以看到, call 切入点匹配的位置在调用类( Main )的方法 void callFoo(A a) 中,而不是在目标类 A 中。

        2 )再来看一下 execution 的例子:


       aspectj-4e.png


      aspectj-f.png


        在这个方面中,切入点没有使用 this target ,而是在 before 通知中使用了 AspectJ API 达到同样的效果。可以看到,切入点 executionA() 匹配的连接点的位置在 A foo() 方法,这和上面的 call 匹配的连接点的位置是不同的。

       aspectj-7t.png

    

      

        从输出可以看到,在 execution 中, this target 指向同一个类 。在 call 中, this target 不是指向同一个类

        execution call 还有一点很重要的区别。对于继承类来说,如果它没有覆盖父类的方法,那么 execution 不会匹配子类中没有覆盖父类的方法。比如说我们有一个类 B 继承于 A ,但没有覆盖 A 类的 foo() ,那么对于 B 的实例的 foo() 方法, execution(* B.foo()) 将不会被匹配。

        做个总结,如果想跟踪连接点的内部代码运行情况可以考虑使用 execution ,但如果你只关心连接点的签名(比如你使用第三方库或是标准 API ),则使用 call

        注:该文参考了《 Eclipse AspectJ 》和《 AspectJ cookbook 》。

分享到:
评论

相关推荐

    aop:aspect

    标题 "aop:aspect" 指涉的是Spring框架中的面向切面编程(Aspect-Oriented Programming, AOP)的一个核心概念。在Spring AOP中,`aop:aspect`是XML配置中定义一个切面的元素,它允许我们将关注点(如日志、事务管理...

    Manufacturing Execution System MES

    Manufacturing Execution Systems – MES Dr.-Ing. Jürgen Kletti Springer Berlin Heidelberg PDF 英文版。解释、建构 MES,最后其中一章谈到与SAP 集成,和塑料加工行业MES 应用。 专门谈 MES 的书其实不多,这本...

    spring aspect 配置2种方式

    在Spring框架中,Aspect是面向切面编程(AOP)的核心概念,它允许我们将关注点分离,比如日志、事务管理等,从主业务逻辑中解耦出来。本篇将详细介绍两种配置Spring Aspect的方式:XML配置和注解配置。 首先,我们来...

    spring4 AOP 面向切面编程@Aspect

    @Pointcut("execution(* com.example.service.*.*(..))") // 定义切入点 public void serviceMethods() {} // 空方法,仅作为切入点的标识 @Before("serviceMethods()") public void logBeforeServiceCall() { ...

    JBPM4中ProcessDefinition、ProcessInstance、Execution、Task关系和区别

    JBPM4 中 ProcessDefinition、ProcessInstance、Execution、Task 关系和区别 ProcessDefinition 是流程的定义,也可以理解为流程的规范。它有一个 id,这个 id 的格式为 {key}-{version},其中 key 和 version 之间...

    东信和平测试平台Execution v5.0

    "东信和平测试平台Execution v5.0"是一款在行业内具有较高知名度的自动化测试工具,专为运营商设计,用于执行脚本级别的测试任务。这款平台的强大之处在于它支持ECN加密脚本和JavaScript脚本,这使得测试人员能够...

    SPRING:aspect和advisor区别

    ### Spring中的Aspect与Advisor区别详解 #### 一、引言 在Spring框架中,面向切面编程(AOP)是一种非常强大的技术,它允许开发者将横切关注点(如日志记录、安全性检查等)从业务逻辑中分离出来。本文旨在深入...

    eager_execution_execution_eagerexecution_tensorflow_

    在TensorFlow库中,Eager Execution是一种立即执行的模式,与传统的图模式(Graph Mode)形成对比。在Eager Execution模式下,TensorFlow的操作会立即评估并返回结果,无需构建计算图并单独运行它。这使得开发过程...

    Hardware_Accelerated_Execution_Manager.zip

    用以解决androidatudio虚拟机因未装haxm而无法运行的情况: 将intelhaxm-android文件放入..sdk\extras\intel\Hardware_Accelerated_Execution_Manager文件下,然后手动运行intelhaxm-android文件。

    MES珍藏宝典:Manufacturing Execution Systems (MES)

    ### MES珍藏宝典:Manufacturing Execution Systems (MES) 相关知识点 #### 一、Manufacturing Execution Systems (MES) 概述 Manufacturing Execution Systems(MES),即制造执行系统,是工业自动化与信息化领域...

    kezhu注入CALL

    因此,开发者需要编写安全的代码,避免出现可被利用的漏洞,同时,系统和应用程序应启用相应的防护机制,如DEP(Data Execution Prevention)、ASLR(Address Space Layout Randomization)等,来防止此类攻击。...

    Aspect-Oriented Programming with AspectJ

    【Aspect-Oriented Programming with AspectJ】是一种编程范式,旨在解决传统面向对象编程中模块化问题,特别是在处理横切关注点(如日志、事务管理、安全性等)时的代码分散和重复。AspectJ是Java平台上的一个开源...

    基于方法的切片缓存插件Aspect-Cache-Plug.zip

      id="adviceAspectPoint" expression="execution(* com.sample..*.*(..)) and @annotation(Aspect)" />   <aop:aspect ref="adviceAspect">    method="execute" pointcut-ref="adviceAspectPoint" ...

    Hardware_Accelerated_Execution_Manager

    《Android模拟器硬件加速:Hardware_Accelerated_Execution_Manager详解》 在移动应用开发领域,Android模拟器扮演着至关重要的角色,它为开发者提供了一个在桌面系统上测试应用程序的平台,无需实际设备。然而,...

    VAL2.rar_Symbolic execution_execution

    《深入理解Symbolic Execution与Execution在Java环境中的应用——基于Symstra框架的C代码解析》 在计算机科学领域,符号执行(Symbolic Execution)是一种强大的软件分析技术,它能够帮助我们理解和验证程序的行为...

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

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

Global site tag (gtag.js) - Google Analytics