基于Eclipse RCP简化IoC实现 - 编程入门网
ConstructorVisitor cv = new ConstructorVisitor();
ClassAnnotationVisitor cav = new ClassAnnotationVisitor(cv);
creader.accept(cav, true);
if (cv.getConstructors().size() > 0) {
System.out.println("Enhancing "+className);
//生成增强的构造器类
ClassWriter cw = new ClassWriter(false);
ClassConstructorWriter writer = new ClassConstructorWriter(cv.getConstructors(),cw);
creader.accept(writer, false);
return cw.toByteArray();
}
else
return null;
}
public static void premain(String agentArgs, Instrumentation inst) {
inst.addTransformer(new IOCTransformer());
}
}
基于Eclipse RCP简化IoC实现(4)时间:2011-01-05 天极 朱先忠上面代码中,类ConstructorVisitor,ClassAnnotationVisitor,ClassWriter和ClassConstructorWriter负责使用ObjectWeb ASM库进行字节码操作。 ASM使用访问者模式来把类数据(包括指令序列)处理为事件流。在解码一个现有类时,ASM为我们生成事件流,并调用我们的方法来处理事件。当生成一个新类时,相反的事情发生了:我们生成了一个事件流-由ASM库负责把它转换成一个生成的类。注意,这种方法并不依赖于使用的特定的字节码库(在我们的例子中,使用的是ASM);其它一些可用的方案,例如BCEL或Javassist,也可以良好地实现这一工作。 在此,我们不会详细涉及ASM的内部机理。在本文中,仅了解ConstructorVisitor和ClassAnnotationVisitor对象用于标识标有可服务的注解的类并且负责收集它们的构造器已经足够了。它们的源码如下所示:
对于前面的类所收集到的每一个构造器,由一个ClassConstructorWriter的实例来修改它-通过下面的调用注入到插件Service Locat |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |