Java中Asm包有什麼用?

ASM能作什麼java

        咱們都知道,通常狀況下,Class文件是經過javac編譯器產生的,而後經過類加載器加載到虛擬機內,再經過執行引擎去執行。web

  如今咱們能夠經過ASM的API直接生成符合Java虛擬機規範的Class字節流,這樣,ASM作的事情必定程度上正是javac解釋器作的工做。spring

     能夠說ASM分析一個類、從字節碼角度建立一個類、修改一個已經被編譯過的類文件編程

     那麼,咱們就能夠經過ASM來實現諸如代碼生成,代碼混淆,代碼轉換等等以字節碼爲操做目標的工做spa

  Asm主要是操做PO字節dng碼的,當Spring , Hibernate整合時,有兩個asm.jar包,這時就要刪除spring下的asm.jar包(避免Spring和hibernate二者包的衝突)。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.visitit

相關文章
相關標籤/搜索