根据配置文件动态生成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)文件的内容,并且可以很容易的进行修改。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: FreeMarker是一个用于生成动态内容的Java模板引擎。它是基于模板和数据模型的,可以将模板文件和数据模型结合起来生成最终的输出结果。 Java基于FreeMarker生成器源码的主要涉及以下几个方面: 1. 导入必要的包:首先需要导入FreeMarker的相关包,包括FreeMarker的核心类、配置类以及模板加载器等。这些包的导入是使用FreeMarker进行模板生成的基础。 2. 配置模板引擎:通过创建Configuration对象来配置FreeMarker模板引擎的相关设置。可以设置模板文件的加载路径、字符编码、错误处理方式等。 3. 加载模板文件:使用TemplateLoader从指定的路径或者是classpath中加载模板文件。加载模板文件后,可以将其编译成Template对象,以便后续的模板生成。 4. 准备数据模型:根据需要的输出结果,准备好数据模型。数据模型可以是一个Java对象,也可以是一个Map,包含了模板需要的各种数据。 5. 生成输出结果:在模板生成时,将数据模型传入模板,调用process方法来生成输出结果。process方法会将数据模型与模板结合起来,生成最终的输出结果。 Java基于FreeMarker生成器源码的核心思想是使用模板引擎将模板文件和数据模型结合起来,生成最终的输出结果。通过配置模板引擎、加载模板文件、准备数据模型,可以实现各种类型的输出结果,如HTML页面、XML文档、邮件模板等。使用FreeMarker可以实现模板的复用,提高系统的可维护性和扩展性。 ### 回答2: FreeMarker是一款基于Java的模板引擎,它的生成器源码提供了一种将模板文件与数据进行组合并生成输出文件的机制。 FreeMarker生成器源码主要包含以下几个关键部分: 1. 模板文件:模板文件是FreeMarker生成器的核心。它使用FreeMarker的模板语法,定义了输出文件的结构和内容。模板文件中可以嵌入变量、条件判断语句、循环语句等,通过填充数据来生成最终的输出文件。 2. 数据源:生成器源码接收数据源作为输入,这些数据源可以是数据库查询结果、API返回的数据、用户输入等。数据源可以包含多个数据对象,每个对象对应模板文件中的一个变量。数据源可以通过Java代码从各种位置获取,然后传递给生成器来生成最终的输出文件。 3. FreeMarker配置配置对象包含了一些生成器的基本设置,比如模板文件所在的路径、输出文件的编码格式等。配置对象可以通过Java代码进行定制,以满足生成器的需求。 4. 模板引擎:模板引擎是FreeMarker生成器的核心处理引擎,它负责将模板文件和数据源进行组合,并生成最终的输出文件。模板引擎会根据模板文件中的语法规则,将数据源的数据填充到模板文件的相应位置,生成最终的输出文件。 5. 输出文件生成器会将最终的输出文件保存到指定的位置,可以是本地文件系统、网络位置或者其他目标。 通过以上几个关键部分的协作,FreeMarker生成器源码实现了将模板文件和数据源进行组合的功能,方便开发人员根据需求生成各种类型的输出文件。它可以应用于各种场景,比如生成静态网页、生成报表、生成邮件内容等等。其灵活且可定制的特性,使得Java基于FreeMarker生成器源码成为了开发人员常用的工具之一。 ### 回答3: Java基于Freemarker生成器源码是一种使用Java语言和Freemarker模板引擎的代码,用于根据模板生成特定类型的文本文件(如HTML、XML、Java等)。 Java基于Freemarker生成器源码的核心思路是将模板文件与数据模型进行结合,生成最终的文本文件。首先,需要准备好模板文件,这个模板文件是一个普通的文本文件,其中嵌入了一些特殊的Freemarker语法标签。这些标签用来表示可替换的部分、循环、条件语句等等。 接下来,通过Java代码读取模板文件,并使用Freemarker引擎解析模板文件。这一步骤将模板文件转换成一个Freemarker的Template对象,然后将数据模型与模板进行合并。数据模型可以是一个Java对象,也可以是一个Map对象。在合并过程中,模板中的Freemarker语法标签会被替换成具体的值或逻辑,从而生成最终的文本文件。 最后,通过Java代码将生成的文本文件保存到指定的位置。生成器源码中通常包含一些文件操作的逻辑,用于创建、保存或输出生成的文本文件。 使用Java基于Freemarker生成器源码可以提高开发的效率和灵活性。通过准备好模板文件和相应的数据模型,我们可以快速生成各种类型的文本文件,无需手动编写大量重复的代码。同时,由于模板文件是可配置的,可以根据具体需求动态生成不同的文本内容。这使得代码的维护和修改更加方便。 总结来说,Java基于Freemarker生成器源码是一种利用Freemarker模板引擎和Java语言实现的代码,用于根据模板和数据模型生成特定类型的文本文件。它能够提高开发效率和灵活性,使得文本文件生成、修改和维护更加方便。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值