WEB开发网
开发学院软件开发Java Java 编程的动态性,第 5 部分: 动态转换类 阅读

Java 编程的动态性,第 5 部分: 动态转换类

 2010-03-18 00:00:00 来源:WEB开发网   
核心提示: 清单 6 给出了我编写来处理这些模式的 javassist.Translator 子类的简略版本,实际的匹配代码与本文并不真正相关,Java 编程的动态性,第 5 部分: 动态转换类(10),不过如果您想要查看它或亲自使用它,我已将它包括在了下载文件中,其中包括诸如拦截所有方法调用或所有字段访问

清单 6 给出了我编写来处理这些模式的 javassist.Translator 子类的简略版本。实际的匹配代码与本文并不真正相关,不过如果您想要查看它或亲自使用它,我已将它包括在了下载文件中。使用这个 TimingTranslator 的主程序类是 BatchTiming ,它也包括在下载文件中。

清单 6. 模式匹配转换程序

public class TimingTranslator implements Translator 
{ 
  public TimingTranslator(String pattern) { 
    // build matching structures for supplied pattern 
    ... 
  } 
   
  private boolean matchType(CtMethod meth) { 
    ... 
  } 
   
  private boolean matchParameters(CtMethod meth) { 
    ... 
  } 
   
  private boolean matchName(CtMethod meth) { 
    ... 
  } 
   
  private void addTiming(CtMethod meth) { 
    ... 
  } 
   
  public void start(ClassPool pool) {} 
  public void onWrite(ClassPool pool, String cname) 
    throws NotFoundException, CannotCompileException { 
     
    // loop through all methods declared in class 
    CtClass clas = pool.get(cname); 
    CtMethod[] meths = clas.getDeclaredMethods(); 
    for (int i = 0; i < meths.length; i++) { 
       
      // check if method matches full pattern 
      CtMethod meth = meths[i]; 
      if (matchType(meth) && 
        matchParameters(meth) && matchName(meth)) { 
         
        // handle the actual timing modification 
        addTiming(meth); 
      } 
    } 
  } 
} 

后续内容

在上两篇文章中,您已经看到了如何使用 Javassist 来处理基本的转换。对于下一篇文章,我们将探讨这个框架的高级特性,这些特性提供用于编辑字节代码的查找和替换技术。这些特性使得对程序行为做出系统性的变更很容易,其中包括诸如拦截所有方法调用或所有字段访问这样的变更。它们是理解为什么 Javassist 是 Java 程序中提供面向方面支持的卓越框架的关键。请下个月再回来看看如何能够使用 Javassist 来揭示应用程序中的方面(aspect)。

上一页  5 6 7 8 9 10 

Tags:Java 编程 动态性

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接