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