动态生成JAVA代码

动态生成JAVA代码

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
根据数据库生成Java代码可以分为两个方面:数据库表结构生成Java实体类的代码,以及数据库查询语句生成Java代码的部分。 对于数据库表结构生成Java实体类的代码,可以使用一些工具来实现,比如Hibernate、MyBatis等。这些工具可以通过数据库的连接信息,自动读取数据库的表结构,然后生成相应的Java实体类代码生成代码会根据表的字段以及数据类型,生成对应的属性和方法。 对于数据库查询语句生成Java代码的部分,可以使用一些代码生成器或者自己编写脚本来实现。一般来说,查询语句可以使用SQL或者类似SQL的语法来描述,根据查询语句可以生成对应的Java代码,比如使用JDBC连接数据库,执行查询语句并将结果封装为Java对象。这样的代码生成通常需要根据具体的查询逻辑和业务需求进行定制。 无论是生成实体类的代码还是生成查询代码的部分,都需要注意数据库的表结构和查询语句的变化会影响代码生成结果。因此,在自动生成代码后,还需要进行一定的手动调整和优化,以满足具体的业务需求。 总而言之,根据数据库生成Java代码是一种提高开发效率和代码质量的方式,可以减少手动编写代码的工作量,并且可以保证代码的一致性和正确性。但同时也需要在生成代码后进行适当的调整和优化,以满足具体的业务需求。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值