Java中Asm包有什么用?


ASM能做什么

        我們都知道,一般情況下,Class文件是通過javac編譯器產生的,然后通過類加載器加載到虛擬機內,再通過執行引擎去執行。

  現在我們可以通過ASM的API直接生成符合Java虛擬機規范的Class字節流,這樣,ASM做的事情一定程度上正是javac解釋器做的工作。

     可以說ASM分析一個類、從字節碼角度創建一個類、修改一個已經被編譯過的類文件

     那么,我們就可以通過ASM來實現諸如代碼生成,代碼混淆,代碼轉換等等以字節碼為操作目標的工作

  Asm主要是操作PO字節dng碼的,當Spring , Hibernate整合時,有兩個asm.jar包,這時就要刪除spring下的asm.jar包(避免Spring和hibernate兩者包的沖突)。

  可能你會問兩者為啥會沖突:

  在使用Spring的AOP編程時,會用到這幾個lib:
    asm-2.2.2.jar
    asm-commons-2.2.2.jar
    asm-util-2.2.2.jar Hibernate使用如下lib: asm.jar
    asm-attrs.jar


    其中asm-2.2.2.jar與asm.jar存在類上的沖突!!!
    使用其中之一或兩者都使用,可能會出現如下錯誤:
    java.lang.NoClassDefFoundError: org/objectweb/asm/CodeVisitor
    java.lang.NoClassDefFoundError: org/objectweb/asm/commons/EmptyVisitor
    java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM