Java反射与代码生成

时间:2014-04-07 06:48:45

标签: java reflection metaprogramming

今天我想知道为什么像Hibernate这样的框架在编译/应用程序启动期间使用反射代替代码生成(例如使用像BCELASM这样的库)。

是否由于历史原因(当Hibernate正在编写时,没有可用的文件库允许动态生成字节代码)现在每个人都使用这种方法?

我认为生成代码的方法会比使用反射的方法更快。

1 个答案:

答案 0 :(得分:6)

是的,Hibernate可能会从代码生成中受益,尽管利润可能没有您想象的那么大。

  1. 首先,Reflection在引擎盖下使用字节码生成并且它不会太慢。
  2. 您不能仅使用字节码生成来执行某些操作。例如。反射允许您访问私有字段并调用私有方法,而生成字节码是不可能的(除非您使用certain non-portable hacks)。