动态生成JAVA代码<!----><o:p></o:p>
BCEL即Bytecode Engineering Library,它是一个第三方的字节码生成库,能帮助我们在内存中直接生成Java字节码。BCEL是一个源代码开放的免费代码库(http://sourceforge.net/projects/bcel/),可以帮助我们分析、创建、处理二进制的Java字节码。本文将说明任何用BCEL来动态生成JAVA代码。<o:p></o:p>
/*<o:p></o:p>
?* 创建日期 2004-7-2<o:p></o:p>
?* 创建人 HongSoft<o:p></o:p>
?* 文件名 TestBCEL.java<o:p></o:p>
?*/<o:p></o:p>
package com.hongsoft.test;<o:p></o:p>
<o:p>?</o:p>
import java.io.*;<o:p></o:p>
import java.util.Stack;<o:p></o:p>
//从sourceforge.net/projects/bcel/下载BCEL代码库<o:p></o:p>
import de.fub.bytecode.classfile.*;<o:p></o:p>
import de.fub.bytecode.generic.*;<o:p></o:p>
import de.fub.bytecode.Constants;<o:p></o:p>
<o:p>?</o:p>
public class TestBCEL? extends ClassLoader {<o:p></o:p>
??? private Object o;<o:p></o:p>
??? public static void? main(String[] args) {<o:p></o:p>
??? ??? ???new TestBCEL ();?????? <o:p></o:p>
}<o:p></o:p>
<o:p>?</o:p>
??? public? TestBCEL ()<o:p></o:p>
?????? {<o:p></o:p>
?????????? ?????? <o:p></o:p>
????????????? // 声明类, Trouble_ticket是类名, 超类是java.lang.Object<o:p></o:p>
?????????????? //ACC代表access, new String[]{}是它要实现的接口的数组<o:p></o:p>
??????? ???????//效果:public Trouble_ticket{}<o:p></o:p>
????????????? ClassGen classgen <o:p></o:p>
????????????????? ?? = new ClassGen("Trouble_ticket", "java.lang.Object", "",??????? ?? Constants.ACC_PUBLIC | Constants.ACC_SUPER,new String[]{});<o:p></o:p>
??????? <o:p></o:p>
????????????? ? //常量池 <o:p></o:p>
ConstantPoolGen cp = classgen.getConstantPool();<o:p></o:p>
???? <o:p></o:p>
????????????????? //构造属性,效果: public String creater=””;<o:p></o:p>
????????????? ?? FieldGen fg=new FieldGen(Constants.ACC_PUBLIC, Type.STRING,??????????? ?? "creater",cp);<o:p></o:p>
????????????????? //加入field<o:p></o:p>
????????????? ?? classgen.addField(fg.getField());<o:p></o:p>
?????? <o:p></o:p>
???????????????????? ? // 构造函数?????????????????? ? ?????????????????? ??classgen.addEmptyConstructor(Constants.ACC_PUBLIC);<o:p></o:p>
???????????????????? ? //Byte形式<o:p></o:p>
???????????????????? ? byte[] data = classgen.getJavaClass().getBytes();<o:p></o:p>
???????????????????? ? //生成类<o:p></o:p>
???????????????????? ? Class c = defineClass(data, 0, data.length);<o:p></o:p>
???????????????????? ? try {<o:p></o:p>
???????????????????????? ? o= c.newInstance();<o:p></o:p>
?????????????????? ???????? //程序效果?????????????? <o:p></o:p>
???????????????????????? System.out.println(o.getClass().getName());<o:p></o:p>
???????????????????????? System.out.println(o.getClass().getField("creater").getName());??? ???????????????????? <o:p></o:p>
???????????????????????? System.out.println(classgen.getFields().length);<o:p></o:p>
???????????????????? ? } catch (IllegalAccessException e) {<o:p></o:p>
???????????????????????? ? throw new RuntimeException(e.getMessage());<o:p></o:p>
???????????????????? ? } catch (Exception e) {<o:p></o:p>
???????????????????????? ? throw new RuntimeException(e.getMessage());<o:p></o:p>
???????????????????? ? } <o:p></o:p>
?????? }<o:p></o:p>
??? <o:p></o:p>
}<o:p></o:p>
程序运行结果如下:<o:p></o:p>
Trouble_ticket<o:p></o:p>
creater<o:p></o:p>
1<o:p></o:p>
分享到:
相关推荐
四种动态生成Java代码的方法四种动态生成Java代码的方法
使用xsl来动态生成java代码,值得探讨
Java动态生成代码并编译载入 Java动态生成代码并编译载入
1、本地执行代码生成工具,可生成controller、service、repository、entity、mapper、mapper.xml的增删改查代码。生成的文件复制到项目路径中,修修改改即可实现大部分CRUD功能。 2、工具不需要导入到项目中,本地...
wsdl生成java代码的工具,运行wsdl2java.cmd ,可根据代码的实际需求修改成路径, wsdl生成java代码的工具,运行wsdl2java.cmd ,可根据代码的实际需求修改成路径
在普通Java程序中应用代码动态生成技术,并测试、比较了各种实现方法的性能
WebService的WSDL文件生成Java代码工具
java代码自动生成工具,可按个人需求自由扩展。
有时候需要在运行时根据模板和数据动态生成 Java 代码,然后对其进行编译生成 Class 文件,然后再将这些类加载 进去,并使用反射来创建对象。
支持java类的自动生成,一键生成所有代码,方便修改,维护
protobuf java代码生成,protobuf java代码生成,protobuf java代码生成,protobuf java代码生成
根据数据库自动生成JAVA代码 实体类 dao service controller jsp html 模版
axis2根据wsdl生成java客户端代码 D:\Software\axis2-1.6.2\bin>wsdl2java.bat -uri http://10.33.30.216:9099/facs/services/ResourceSynchroWebService?wsdl -o E:\wsdloutput -p com.util wsdl2java.bat -uri ...
利用freemarker生成MVC代码,避免做大量重复的复制黏贴替换工作,更专注在业务代码实现和难度更大的技术问题上,提高工作效率
卡密自动生成代码 java代码 有兴趣的看看 来吧来吧卡密自动生成代码卡密自动生成代码卡密自动生成代码卡密自动生成代码
实现java代码生成cer证书文件,然后可以通过代码获取 不通过keytool工具。生成密钥对。使用公钥加密。
更具表结构自动生成Dao,xml,Entity。只需要修改对于的XML即可灵活配置
利用java实现简单动态生成word模版 项目中需要用 java 程序生成doc 文件,百度一番,发现FreeMarker 的评价比较高。 FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出,至于想详细了解 ...
java代码生成工具,使用freemarker做模版,resource下有模版的例子,可以自己定义需要生成的模版进行生成。暂时只开发了controller,service ,impl的模版。
1.codeFactory: Java代码生成,依赖rapid-generator.4.0.6.jar, 支持自定义模板生成代码, 弱业务下完全解放体力劳动. 2.ssm模板实现:pojo,dao,daoimpl,service,serviceimpl,controller,各mapper.xml 代码自动生成, 3....