快速业务通道

Java编程的动态性,第6部分: 利用Javassist进行面向方面的更改 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
里我不是记录操作,而是选择实际修改存 储在所选字段中的 String 值。在 FieldSetEditor 中,我实现了匹配字段访问的方法签名 。在这个方法中,我只检查两样东西:字段名是否是我所查找的,操作是否是一个存储过程 。找到匹配后,就用使用实际的 TranslateEditor 应用程序类中 reverse() 方法调用的结 果来替换原来的存储。 reverse() 方法就是将原来字符串中的字母顺序颠倒并输出一条消息 表明它已经使用过了。

清单 5. 颠倒字符串集

public class TranslateEditor {    public static void main(String[] args) {      if (args.length >= 3) {        try {          // set up class loader with translator          EditorTranslator xlat =            new EditorTranslator(args[0], new FieldSetEditor(args [1]));          ClassPool pool = ClassPool.getDefault(xlat);          Loader loader = new Loader(pool);          // invoke the "main" method of the application  class          String[] pargs = new String[args.length-3];          System.arraycopy(args, 3, pargs, 0, pargs.length);          loader.run(args[2], pargs);        } catch (Throwable ex) {          ex.printStackTrace();        }      } else {        System.out.println("Usage: TranslateEditor clas-name " +         "field-name main-class args...");      }    }    public static String reverse(String value) {      int length = value.length();      StringBuffer buff = new StringBuffer(length);      for (int i = length-1; i >= 0; i--) {        buff.append(value.charAt(i));      }      System.out.println("TranslateEditor.reverse returning " +  buff);      return buff.toString();    }    public static class EditorTranslator implements Translator    {      private String m_className;      private ExprEditor m_editor;      private EditorTranslator(String cname, ExprEditor editor) {        m_className = cname;        m_editor = editor;      }      public void start(ClassPool pool) {}      public void onWrite(ClassPool pool, String cname)        throws NotFoundException, CannotCompileException {        if (cname.equals(m_className)) {          CtClass clas = pool.get(cname);          clas.instrument(m_editor);        }      }    }    public static class FieldSetEditor extends ExprEditor    {      private String m_fieldName;      private FieldSetEditor(String fname) {        m_fieldName = fname;      }      public void edit(FieldAccess arg) throws CannotCompileException  {        if (arg.getFieldName().equals(m_fieldName) &&  arg.isWriter()) {          StringBuffer code = new StringBuffer();          code.append("$0.");          code.app

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号