美文网首页
2.5 运行时支持

2.5 运行时支持

作者: liril | 来源:发表于2016-03-27 21:43 被阅读59次

2.5 运行时支持

2.5.1 建议代码支持

对于许多方向来说,访问上下文变量并不能获得关于建议代码激活的结合点的足够信息。例如,对于一个函数调用完整的日志控制流方向,我们需要关于函数参数和运行时类型的相关信息,这样才可能产生类型匹配的输出。

在AspectC++中,这一信息由类JoinPoint的成员提供(见下表)。

表 1:建议代码中可用的类JoinPoint的API

JoinPointAPI的类和静态方法对每个建议代码激活是传递的信息都是相同的。而非静态方法在不同的激活里传递的信息是不同的。这些方法可以通过对象tjp分别访问。JoinPoint类型的thisJoinPoint也一直可以在建议代码中访问到。

下面的例子演示了如何使用JoinPointAPI实现一个可复用的控制流方向。

例:可复用追踪方向

aspect Trace {
    pointcut virtual methods() = 0;

    advice execution(methods()) : around() {
        cout << "before " << JoinPoint::signature() << "(";
        for (unsigned i = 0; i < JoinPoint::args(); i++) {
            printvalue(tjp->arg(i), JoinPoint::argtype(i));
        }
        cout << ")" << endl;
        tjp->proceed();
        cout << "after" << endl;
    }
};

这个对象通过重新定义派生方向指定的虚点切将追踪代码编织到每个函数中。帮助者函数printvalue负责格式化输出函数调用中给出的参数。在为每个参数调用printvalue之后,实际结合点的程序代码通过调用JoinPoint对象的proceed执行。proceed的功能通过使用这样的动作实现。

2.5.2 动作

在AspectC++中,动作是在运行的程序到达的结合点后建议代码不会激活后跟随的状态序列。因此tjp->proceed()触发了结合点的程序代码的执行。这款也是函数的调用或者执行。动作概念可以在AC::Action结构中查询到。事实上,proceed等同于action().trigger(),所以tjp->proceed()也可以使用tjp->Action().trigger()替代。因此JoinPointAPI的action()方法实际上返回了结合点的真正的动作对象。

相关文章

  • 2.5 运行时支持

    2.5 运行时支持 2.5.1 建议代码支持 对于许多方向来说,访问上下文变量并不能获得关于建议代码激活的结合点的...

  • Objective-C Runtime

    描述macOS OC运行时库支持的函数和数据结构. 通览 OC运行时是一个运行时库,该库用来支持OC语言的动态属性...

  • 第14章 类型信息

    运行时类型:RTTI(Run-Time Type Identification),面向对象编程语言支持。通过运行时...

  • C++ 运行时类型识别(RTTI)

    C++ 运行时类型识别(RTTI) C++以虚函数的形式支持了多态,某种形式上支持了运行时类型决议;但是dynam...

  • Django笔记(五)搜索 django-haystack +

    haystack haystack 2.5 暂时支持到solr 4.10 (记笔记当时情况) solr 4.10 ...

  • jenkins pipeline初见

    Pipeline支持两种语法:Declarative(在Pipeline 2.5中引入)和Scripted Pip...

  • 2.5-运行时数据区

    java运行时数据区分为虚拟机管理生死和线程绑定两类数据区 1.虚拟机负责创建销毁 1.1堆区域 存放类实例对象和...

  • spring框架(IOC) 注解

    7.4 使用注解实现自动装配 jdk1.5支持注解,Spring2.5开始支持注解。 要使用注解须知: 导入约束:...

  • 基于 ABAP Fundamental Library 应用支持

    Fundamental Library for ABAP 运行时组件支持下列的 Connectivity Prov...

  • Objective-C Runtime

    Objective-C运行时是一个运行时库,它支持Objective-C语言的动态属性,因此所有Objective...

网友评论

      本文标题:2.5 运行时支持

      本文链接:https://www.haomeiwen.com/subject/vhljlttx.html