根据配置文件动态生成JAVA类的一点思路
2012-02-24 14:13
851 查看
有三种方式根据配置文件生成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类的一点思路
- 使用hibernate扩展工具Hbm2JavaTask根据配置文件生成持久化对象类(2.1.2)
- java根据properties配置文件来实现功能模块的动态切换
- 根据环境变量配置,动态加载配置文件(区分开发环境,生成环境)
- 从Java应用程序动态生成PDF文件
- 【Android】Android Layout Binder——根据layout布局文件自动生成findViewById的java代码的神器
- 使用Hibernate-tools中的hbm2java和hbm2ddl根据hbm文件自动生成pojo和数据库脚本
- java千万级别数据生成文件思路和优化
- 根据测试用例的java源码自动生成TestNG的XML文件
- protobuf的配置原始文件.proto中,使用修饰符repeated、required、optional生成的java文件的区别
- java通过jacob调用word (根据Word模板生成动态内容)
- commons-logging 和log4j包下载 Spring根据XML配置文件生成对象
- java千万级别数据生成文件思路和优化
- Java 根据Properties读写Properties配置文件
- IOS_推送配置(客户端+(PHP)pem文件、(java/c#)p12文件生成)
- java 根据xpath生成xslt语法文件
- 利用python操作android的xml资源文件,让其按照中文自动生成对应中文首字母加起来的名字,并且根据中文在java类里面替代对应的中文
- 用java代码实现从excel表格读取数据然后写入生成国际化配置文件properties
- 直接用java命令行动态生成jpg文件
- 根据hibernate.cfg.xml配置文件和相应实体类及其.hbm.xml文件生成对应的数据库表