Classwo***ng工具箱: 注释(Annotation)与ASM - 编程入门网
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. 侃尖窃議廣瞥
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |