快速业务通道

Classwo***ng工具箱: 注释(Annotation)与ASM - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
lements ClassFileTransformer {    // transformer interface implementation    public byte[] transform(ClassLoader loader, String cname, Class class,      ProtectionDomain domain, byte[] bytes)      throws IllegalClassFormatException {      System.out.println("Processing class " + cname);      try {        // scan class binary format to find fields for toString() method        ClassReader creader = new ClassReader(bytes);        FieldCollector visitor = new FieldCollector();        creader.accept(visitor, true);        FieldInfo[] fields = visitor.getFields();        if (fields.length > 0) {          // annotated fields present, generate the toString() method          System.out.println("Modifying " + cname);          ClassWriter writer = new ClassWriter(false);          ToStringGenerator gen = new ToStringGenerator(writer,              cname.replace(''.'', ''/''), fields);          creader.accept(gen, false);          return writer.toByteArray();        }      } catch (IllegalStateException e) {        throw new IllegalClassFormatException("Error: " + e.getMessage() +          " on class " + cname);      }      return null;    }    // Required method for instrumentation agent.    public static void premain(String arglist, Instrumentation inst) {      inst.addTransformer(new ToStringAgent());    } }

J2SE 5.0 的 instrumentation 特性远远不止是我在此所展示的,它包括访问加载到 JVM 中的所有类,甚至重定义已有类(如果 JVM 支持的话)的能力。对于本文,我将跳过其他的特性,继续来看用于处理注释和修改类的 ASM 代码。

Classworking垢醤?: 廣瞥?Annotation?嚥ASM(5)

扮寂:2011-06-27 IBM Dennis Sosnoski

拙持圷方象

ASM 2.0 聞侃尖廣瞥延誼厚否叟阻。屎泌艇壓 貧倖埖議猟嫗 嶄阻盾欺議?ASM 聞喘 visitor 議圭隈栖烏御窃方象議侭嗤怏周。J2SE 5.0 廣瞥頁聞喘 org.objectweb.asm.AnnotationVisitor 俊笥烏御議。乎俊笥協吶阻叱倖圭隈?凪嶄厘繍峪聞喘曾倖?visitAnnotation() 頁侃尖廣瞥扮距喘議圭隈?遇 visit() 頁侃尖廣瞥議蒙協議兆峙斤扮距喘議圭隈。厘珊俶勣糞縞忖粁佚連?宸頁聞喘児云 org.objectweb.asm.ClassVisitor 俊笥嶄議 visitField() 圭隈烏御議。

糞?湖佶箸議曾倖俊笥議侭嗤圭隈繍頁庇海窪龍議?徽侑塰議頁 ASM 戻工阻匯倖圭宴議 org.objectweb.asm.commons.EmptyVisitor 窃?恬葎園亟徭失議 visitor 議児粥。EmptyVisitor 峪頁戻工阻侭嗤音揖嶽窃議 visitor 議腎議糞??塋俯艇峪斤湖佶箸議 visitor 圭隈秀徨窃才嶷亟。賠汽 5 公竃阻制婢 EmptyVisitor 窃遇誼欺議侃尖 ToString 廣瞥議 FieldCollector 窃。賠汽嶄匆淫根阻喘栖隠贋辺鹿議忖粁佚連議 FieldInfo 窃。

賠汽 5. 侃尖窃議廣瞥

package com.sosnoski.asm; import java.util.ArrayList; import java.util.Arrays; import org.objectweb.asm.AnnotationVisitor; import org.objectweb.asm.FieldVisitor; import org.objectweb.asm.Opcodes; import org.objectweb.asm.Type; import org.o

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号