`

根据配置文件动态生成JAVA类的一点思路

阅读更多

有三种方式根据配置文件生成JAVA类:

 

第一:
是我们自己实现一个工具,手工调用来根据配置文件生成Java源代码,这种方式就是代码生成器之类的工具。
这种方式的好处是可以在开发过程中生成类文件,然后在其他代码中正常调用而不需要反射来调用,缺点是无法在运行期修改配置文件后让类同步更改。

 


第二:
在程序运行时,根据配置文件生成Java源代码,然后调用javac来编译,与Servlet Container处理JSP的机制一样。
这种方式的好处是容易理解,可以在运行期修改配置文件,并且让类同步更改;缺点是在编译类时会启动一个Javac进程,在物理资源紧张的情况下,可能造成内存溢出之类的错误,甚至会导致无法启动编译器;这种方式需要以反射方式来调用生成的类。

 


第三:
是使用一些开源的字节码工具,在运行时根据配置文件动态创建class的字节码,然后再通过反射方式调用类。
这种方式的好处是在运行时动态生成类,配置文件改变了,下次启动时动态类随之改变;缺点是早期的字节码工具需要对Java类结构和JVM指令有一定了解,不过现在已经有很多字节码工具已经有了很较大的发展,不再需要了解Java类结构和JVM指令。
这一类的字节码工具有不少,常见的(从 http://www.open-open.com/54.htm 上摘录了一些):
===============================
CGLIB

cglib是一个强大的,高性能,高质量的Code生成类库。它可以在运行期扩展Java类与实现Java接口。Hibernate用它来实现PO字节码的动态生成。

 


ObjectWeb ASM ( 也有人简称之为 ASM )
ASM 是一个 Java 字节码操控框架。它能被用来动态生成类或者增强既有类的功能。ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。Java class 被存储在严格格式定义的 .class 文件里,这些类文件拥有足够的元数据来解析类中的所有元素:类名称、方法、属性以及 Java 字节码(指令)。ASM 从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类。
ObjectWeb ASM轻量级的Java字节码处理框架。它可以动态生成二进制格式的stub类或其他代理类,或者在类被JAVA虚拟机装入内存之前,动态修改类。ASM 提供了与 BCEL和SERP相似的功能,只有22K的大小,比起350K的BCEL和150K的SERP来说,是相当小巧的,并且它有更高的执行效率,是BCEL的7倍,SERP的11倍以上。

 

 

Javassist
Javassist是一个开源的分析、编辑和创建Java字节码的类库。是由东京技术学院的数学和计算机科学系的 Shigeru Chiba 所创建的。它已加入了开放源代码JBoss 应用服务器项目,通过使用Javassist对字节码操作为JBoss实现动态AOP框架。

 

 

BECL
Byte Code Engineering Library (BCEL),这是Apache Software Foundation 的Jakarta 项目的一部分。BCEL是 Java classworking 最广泛使用的一种框架,它可以让您深入 JVM 汇编语言进行类操作的细节。BCEL与Javassist 有不同的处理字节码方法,BCEL在实际的JVM 指令层次上进行操作(BCEL拥有丰富的JVM 指令级支持)而Javassist 所强调的源代码级别的工作。

 

 

Cojen
Cojen是一个动态Java字节码生成和分解工具。使用一个建造器来方便地生成代码,而不用再选择精确的指令。Cojen提供的工具类演示了代码生成器和加载器的使用。

 


JClassLib
JClassLib不但是一个字节码阅读器而且还包含一个类库允许开发者读取,修改,写入Java Class文件与字节码。

 


SERP
SERP字节码框架提供一组高级的APIs进行字节码各主方面的操作。SERP字节码框架能够使你不需要明白class文件格式与JVM 指令就可以轻松完成bytecode 操作

 

 

JBET
通过JBET(Java Binary Enhancement Tool )的API可对Class文件进行分解,重新组合,或被编辑。JBET也可以创建新的Class文件。JBET用一种结构化的方式来展现Javabinary (.class)文件的内容,并且可以很容易的进行修改。

分享到:
评论

相关推荐

    Java千万级别数据生成文件思路和优化

    程序可以配置多少文件生成到一个文件中去。程序刚开始设计的时候说的是最多百万级别数据,最多50W数据生成到一个xml文件里面去,所以在做测试的时候自己也只是造了100W的数据并没有做过多数据量的测试,然后问题就...

    java操纵xml文件的读写,并根据xml生成树型菜单

    在现代软件开发中,XML(Extensible Markup Language)被广泛应用于数据交换、配置文件管理以及多种跨平台的应用场景中。Java作为一种重要的后端开发语言,提供了丰富的API来处理XML文件。本文将详细介绍如何使用...

    java生成html

    在Java编程语言中,生成HTML是一种常见的任务,特别是在构建动态网站、报表生成或者自动化文档生产等场景。这个任务通常涉及到将数据与预定义的HTML模板结合,生成最终的HTML文件。下面我们将深入探讨如何在Java中...

    ruby生成java文件的工具

    标题中的“ruby生成java文件的工具”指的是使用Ruby编程语言编写的一种工具,它能够自动生成Java源代码。这种工具通常用于提高开发效率,特别是在需要大量重复性代码的情况下,如数据访问对象(DAO)、控制器...

    毕业设计-java代码生成器

    7. 配置管理:学会使用配置文件控制代码生成行为。 8. 版本控制:理解版本控制系统如Git的使用,便于团队协作和代码管理。 总之,“毕业设计-java代码生成器”是一个综合性的学习资源,涵盖了Java开发的多个方面,...

    java小工具(批量产生代码,生成pojo,hibernate配置文件等)

    于是试着动手写了一个可以把数据库表自动写成pojo类,并且产生hibernate配置文件。虽然不是什么比较高级的程序,但是我希望也能对大家有一些帮助。不要吃我当时的闭门羹,算是给朋友们,提供一个思路吧。 备注:运行...

    JAVA动态表单设计,自定义表单,自定义数据

    这是Maven项目的配置文件,用于管理项目的依赖、构建设置等。在动态表单项目中,它会列出所有必要的库,如Spring Boot、MyBatis等,以便于构建和运行项目。 总的来说,"JAVA动态表单设计,自定义表单,自定义数据...

    java源码包---java 源码 大量 实例

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java调用winrar生成压缩文件路径有空格问题

    // 读取配置文件 File file = new File(path + "winRaR/winrar.properties"); InputStream is = new FileInputStream(file); Properties p = new Properties(); try { p.load(is); } catch (IOException e) {...

    Java学习思路.pdf

    1. CLASSPATH:在Java开发中,CLASSPATH环境变量用于指定Java运行时环境、编译器查找类文件的路径。 2. JDK文档:JDK文档包含Java类库的详细信息,通过阅读和参考文档可以更好地理解和使用Java类库。 3. IDE(集成...

    java借助Excle模板生成定制化PDF文件

    java借助Excle模板生成定制化PDF文件 功能:通过可配置的Excle模板生成PDF文件,并通过浏览器输出到客户端。 实现思路:该功能通过三个步骤实现 第一:服务器端通过excle模板生成Excle文件 第二:通过jacob,将...

    Java思维导图xmind文件+导出图片

    CDN静态文件访问 分布式存储 分布式搜索引擎 应用发布与监控 应用容灾及机房规划 系统动态扩容 分布式架构策略-分而治之 从简到难,从网络通信探究分布式通信原理 基于消息方式的系统间通信 理解通信协议...

    JSP动态生成HTML静态页面源码

    JSP动态生成HTML静态页面的核心思路是,当一个动态页面被首次访问或者内容更新时,服务器不直接返回JSP生成的HTML,而是先将其转换为一个静态HTML文件,然后将这个静态文件返回给客户端。后续的相同请求就直接返回这...

    java源码包3

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java源码包2

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java源码:懒惰者代码生成器 IdlerCodeGenerator.zip

    4. **反射和元编程**:在某些情况下,IdlerCodeGenerator可能利用Java的反射机制来动态地生成或修改类,这是一种高级特性,深入理解可以拓宽我们的编程视野。 5. **异常处理**:良好的异常处理是软件稳定运行的关键...

    generatorSqlmapCustom_mybatis自动生成sql_源码

    Mybatis的代码生成器(Mybatis Generator)是一个可以根据数据库表信息自动生成Java模型类、Mapper接口和XML配置文件的工具。通过配置XML文件,我们可以指定数据库连接信息、需要生成的表以及生成的代码风格等参数。...

    文件压缩与RSA加密JAVA实现

    在Java中,可以使用`java.util.zip`包中的类来实现文件的压缩和解压缩。例如,`ZipOutputStream`和`ZipInputStream`可以用于创建和读取ZIP格式的压缩文件,而`GZIPOutputStream`和`GZIPInputStream`则对应于GZIP格式...

    IBM内部javacore分析pdf教程文件

    - 用户也可以手动触发生成javacore文件,比如通过命令行工具或者管理控制台。 #### 四、javacore文件的分析步骤 1. **定位javacore文件:** - 首先需要确定javacore文件的存储位置,这通常是由系统的配置决定的...

Global site tag (gtag.js) - Google Analytics