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