Get the App
SLTechnology News&Howtos  ›  Development  › 

How ASM generates Java classes

Shulou Source: shulou.com Published: 2022-06-02 10:05:34 09月20日 Update

In this issue, Xiaobian will bring you about how ASM generates Java classes. The article is rich in content and analyzes and narrates from a professional perspective. After reading this article, I hope you can gain something.

public class GeneratorBean implements org.objectweb.asm.Opcodes

{

public byte[] getBeanByName (String beanname, String[][] nameAndDesc)

{

ClassWriter classWriter = new ClassWriter (ClassWriter.COMPUTE_MAXS);

classWriter.visit (this.V1_5, this.ACC_PUBLIC, beanname, null, "java/lang/Object", new String[]

{ "java/io/Serializable" });

classWriter.visitField (this.ACC_FINAL | this.ACC_STATIC | this.ACC_PRIVATE, "serialVersionUID", "J", null,

System.currentTimeMillis ());

MethodVisitor mv = classWriter.visitMethod (this.ACC_PUBLIC, "

", "()V", null, null);

mv.visitCode ();

mv.visitVarInsn (this.ALOAD, 0);

mv.visitMethodInsn (this.INVOKESPECIAL, "java/lang/Object", "", "()V");

mv.visitInsn (this.RETURN);

mv.visitEnd ();

String desc = null;

for (int i = 0; i < nameAndDesc.length; i++)

{

nameAndDesc[i][1] = nameAndDesc[i][1].replace (". ", "/");

desc = formatDesc (nameAndDesc[i][1]);

classWriter.visitField (this.ACC_PRIVATE, nameAndDesc[i][0], desc, null, null);

mv = classWriter.visitMethod (this.ACC_PUBLIC, "get" + nameAndDesc[i][0], "()" + desc, null, null);

mv.visitCode ();

mv.visitVarInsn (this.ALOAD, 0);

mv.visitFieldInsn (this.GETFIELD, beanname, nameAndDesc[i][0], nameAndDesc[i][1]);

mv.visitInsn (this.IRETURN);

mv.visitEnd ();

mv = classWriter.visitMethod (this.ACC_PUBLIC, "set" + nameAndDesc[i][0], "(" + desc + ")V", null, null);

mv.visitCode ();

mv.visitVarInsn (ALOAD, 0);

mv.visitVarInsn (ILOAD, 1);

mv.visitFieldInsn (PUTFIELD, beanname, nameAndDesc[i][0], nameAndDesc[i][1]);

mv.visitInsn (RETURN);

mv.visitEnd ();

}

return classWriter.toByteArray ();

} The above is how ASM generates Java classes shared by Xiaobian. If you happen to have similar doubts, you may wish to refer to the above analysis for understanding. If you want to know more about it, please pay attention to the industry information channel.

Tags: Generation content analysis professional small and medium-sized rich in content that is articles more knowledge articles industry perspective information information channels channels related Apple Docker Huawei Linux macOS MariaDB Microsoft MySQL NVidia OPPO Reno macOS Shulou Information MariaDB Huawei Microsoft