动态生成JAVA代码
2008-06-10 16:40
519 查看
动态生成JAVA代码[/b] BCEL即Bytecode Engineering Library,它是一个第三方的字节码生成库,能帮助我们在内存中直接生成Java字节码。BCEL是一个源代码开放的免费代码库(http://sourceforge.net/projects/bcel/),可以帮助我们分析、创建、处理二进制的Java字节码。本文将说明任何用BCEL来动态生成JAVA代码。 /* ?* 创建日期 2004-7-2 ?* 创建人 HongSoft ?* 文件名 TestBCEL.java ?*/ package com.hongsoft.test; ? import java.io.*; import java.util.Stack; //从sourceforge.net/projects/bcel/下载BCEL代码库 import de.fub.bytecode.classfile.*; import de.fub.bytecode.generic.*; import de.fub.bytecode.Constants; ? public class TestBCEL? extends ClassLoader { ??? private Object o; ??? public static void? main(String[] args) { ??? ??? ???new TestBCEL ();?????? } ? ??? public? TestBCEL () ?????? { ?????????? ?????? ????????????? // 声明类, Trouble_ticket是类名, 超类是java.lang.Object ?????????????? //ACC代表access, new String[]{}是它要实现的接口的数组 ??????? ???????//效果:public Trouble_ticket{} ????????????? ClassGen classgen ????????????????? ?? = new ClassGen("Trouble_ticket", "java.lang.Object", "",??????? ?? Constants.ACC_PUBLIC | Constants.ACC_SUPER,new String[]{}); ??????? ????????????? ? //常量池 ConstantPoolGen cp = classgen.getConstantPool(); ???? ????????????????? //构造属性,效果: public String creater=””; ????????????? ?? FieldGen fg=new FieldGen(Constants.ACC_PUBLIC, Type.STRING,??????????? ?? "creater",cp); ????????????????? //加入field ????????????? ?? classgen.addField(fg.getField()); ?????? ???????????????????? ? // 构造函数?????????????????? ? ?????????????????? ??classgen.addEmptyConstructor(Constants.ACC_PUBLIC); ???????????????????? ? //Byte形式 ???????????????????? ? byte[] data = classgen.getJavaClass().getBytes(); ???????????????????? ? //生成类 ???????????????????? ? Class c = defineClass(data, 0, data.length); ???????????????????? ? try { ???????????????????????? ? o= c.newInstance(); ?????????????????? ???????? //程序效果?????????????? ???????????????????????? System.out.println(o.getClass().getName()); ???????????????????????? System.out.println(o.getClass().getField("creater").getName());??? ???????????????????? ???????????????????????? System.out.println(classgen.getFields().length); ???????????????????? ? } catch (IllegalAccessException e) { ???????????????????????? ? throw new RuntimeException(e.getMessage()); ???????????????????? ? } catch (Exception e) { ???????????????????????? ? throw new RuntimeException(e.getMessage()); ???????????????????? ? } ?????? } ??? } 程序运行结果如下: Trouble_ticket creater 1
相关文章推荐
- java动态代理生成$Proxy0源代码的操作
- JAVA根据模板将动态内容生成静态网页的代码
- java生成动态gif格式与png格式的验证码(代码1)
- 动态生成JAVA代码
- 生成动态代理的通用java代码
- Java查看动态代理生成的代码
- Java查看动态代理生成的代码 in Action
- Java中代码动态生成
- 动态生成JAVA代码(二)
- java随机动态生成汉字验证码图片的实例代码分享
- java 动态代码生成。
- 动态生成JAVA代码
- JavaPoet动态生成代码
- java应用maven插件动态生成webservice代码
- 动态生成JAVA代码(三)
- Java下的框架编程(反射,泛型,元数据,CGLib,代码动态生成,AOP,动态语言嵌入)
- Java查看动态代理生成的代码
- Android 通过Java代码生成创建界面。动态生成View,动态设置View属性。addRules详解
- java随机动态生成汉字验证码图片的实例代码分享
- 动态生成JAVA代码(三)