Java运行时动态生成类,其实现过程是怎样的详细解析?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1712个文字,预计阅读时间需要7分钟。
最近一个项目中,我采用了规则引擎,为用户提供灵活的拖拽式定义规则。这需要根据数据库动态生成对象处理特定规则。由于手写代码,每次修改后都必须进行代码修改和版本测试。
最近一个项目中利用规则引擎,提供用户拖拽式的灵活定义规则。这就要求根据数据库数据动态生成对象处理特定规则的逻辑。如果手写不仅每次都要修改代码,还要每次测试发版,而且无法灵活根据用户定义的规则动态处理逻辑。所以想到将公共逻辑写到父类实现,将特定逻辑根据字符串动态生成子类处理。这就可以一劳永逸解决这个问题。
那就着手从Java如何根据字符串模板在运行时动态生成对象。
Java是一门静态语言,通常,我们需要的class在编译的时候就已经生成了,为什么有时候我们还想在运行时动态生成class呢?
经过一番网上资料查找,由繁到简的方式总结如下:
一、利用JDK自带工具类实现
现在问题来了,动态生成字节码,难度有多大?
如果我们要自己直接输出二进制格式的字节码,在完成这个任务前,必须先认真阅读JVM规范第4章,详细了解class文件结构。估计读完规范后,两个月过去了。
所以,第一种方法,自己动手,从零开始创建字节码,理论上可行,实际上很难。
第二种方法,使用已有的一些能操作字节码的库,帮助我们创建class。
目前,能够操作字节码的开源库主要有CGLib和Javassist两种,它们都提供了比较高级的API来操作字节码,最后输出为class文件。
本文共计1712个文字,预计阅读时间需要7分钟。
最近一个项目中,我采用了规则引擎,为用户提供灵活的拖拽式定义规则。这需要根据数据库动态生成对象处理特定规则。由于手写代码,每次修改后都必须进行代码修改和版本测试。
最近一个项目中利用规则引擎,提供用户拖拽式的灵活定义规则。这就要求根据数据库数据动态生成对象处理特定规则的逻辑。如果手写不仅每次都要修改代码,还要每次测试发版,而且无法灵活根据用户定义的规则动态处理逻辑。所以想到将公共逻辑写到父类实现,将特定逻辑根据字符串动态生成子类处理。这就可以一劳永逸解决这个问题。
那就着手从Java如何根据字符串模板在运行时动态生成对象。
Java是一门静态语言,通常,我们需要的class在编译的时候就已经生成了,为什么有时候我们还想在运行时动态生成class呢?
经过一番网上资料查找,由繁到简的方式总结如下:
一、利用JDK自带工具类实现
现在问题来了,动态生成字节码,难度有多大?
如果我们要自己直接输出二进制格式的字节码,在完成这个任务前,必须先认真阅读JVM规范第4章,详细了解class文件结构。估计读完规范后,两个月过去了。
所以,第一种方法,自己动手,从零开始创建字节码,理论上可行,实际上很难。
第二种方法,使用已有的一些能操作字节码的库,帮助我们创建class。
目前,能够操作字节码的开源库主要有CGLib和Javassist两种,它们都提供了比较高级的API来操作字节码,最后输出为class文件。

