Hibernate底层技术简介 ASM

来源:互联网 发布:麻生明知乎 编辑:程序博客网 时间:2024/05/22 06:59

参考《精通Hibernate》,刘洋 著

(1) asm项目简介

from the site http://asm.objectweb.org/, it says that, ASM is a Java bytecode manipulation framework. It can be used to dynamically generate stub classes or other proxy classes, directly in binary form, or to dynamically modify classes at load time, i.e., just before they are loaded into the Java Virtual Machine.

Eclipse的plugin地址用:http://download.zh.forge.objectweb.org/eclipse-update/ ,速度超快。

附加一点:Eclipse使用技巧之插件管理

  提示:新下载的插件PlugIn一定不要都放在原始的Eclipse目录下去,一大堆,累死你:(

  1. 前提是你已经安装好了Eclipse工具了,比如安装在E:/OpenSource/Eclipse/目录下,以下这个目录以%ECLIPSE_HOME%来进行表示;
  2. 此时默认的插件是在%ECLIPSE_HOME%/plugins目录中的;
  3. 在%ECLIPSE_HOME%下建立一个PlugInsNew的目录;

      比如:E:/OpenSource/Eclipse/PlugInsNew/

  4. 你下载了个新的插件,比如叫做:XYZ   那么就在%ECLIPSE_HOME%/PlugInsNew/目录下建立XYZ目录,目录里面是eclipse目录,eclipse目录包含有features与plugins两个子目录;结构如下图所示:

     

  5. 把下载的新插件的文件放在以下相应目录中

      %ECLIPSE_HOME%/PlugInsNew/XYZ/eclipse/features
      %ECLIPSE_HOME%/PlugInsNew/ XYZ/eclipse/plugins

  6. 建立相关的.link的文件
      然后在%ECLIPSE_HOME%/links目录里建立一个XYZ.link的文件
    内容如是:path=E:/OpenSource/Eclipse/PlugInsNew/XYZ就一行这样的路径指示而已。
    这样,如果你下载了多个插件就可以如法炮制建立多个Link文件,想加载哪个插件就把哪个插件的Link文件放到%ECLIPSE_HOME%/links的目录中即可,使用与管理都很方便,建议千万不要放在默认的安装目录中;
    如果你的%ECLIPSE_HOME%与此不同,请修改XYZ.link文件里的路径
  7. 删除,关闭Eclipse
      删除%ECLIPSE_HOME%/links/XYZ.link文件即可
    删除%ECLIPSE_HOME%/PlugInsNew/XYZ整个目录及文件
  8. 重新启动Eclipse即可

(2) Eclipse插件之Bytecode Outline(http://dev2dev.bea.com.cn/bbsdoc/20060123182.html),这篇文章写的不错,可以当作asm的入门。

(3) hibernate不是使用的反射技术,而是使用了CGLIB来代替。 ASM是一个简洁快速的字节码工具,通过ASM可以在运行的状态下动态的修改已经编译完成的java类,使用的是访问者模式(Visitor Pattern)。读过Javac源代码的人对这点应很清楚,GJC对于编译时产生的抽象语法树进行语法分析、语义分析、代码生成等,使用的就是访问者模式,GoF的设计模式也是以解释器为例进行讲解的。