Network Security Internet Technology Development Database Servers Mobile Phone Android Software Apple Software Computer Software News IT Information

In addition to Weibo, there is also WeChat

Please pay attention

WeChat public account

Shulou

How ASM generates Java classes

2025-01-19 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Development >

Share

Shulou(Shulou.com)06/02 Report--

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.

Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.

Views: 0

*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.

Share To

Development

Wechat

© 2024 shulou.com SLNews company. All rights reserved.

12
Report