BeanTest2.java

import java.io.FileOutputStream;

import org.objectweb.asm.AnnotationVisitor;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes; public class BeanTest2 extends ClassLoader implements Opcodes{ public static void main(String []args) throws Exception
{
ClassWriter cw = new ClassWriter(0);
//类名
cw.visit(V1_7, ACC_PUBLIC, "com/xxx/model/_766ComLeakInfo", null, "com/xxx/model/LeakInfo", null);
//注释
AnnotationVisitor av = cw.visitAnnotation("Lorg/springframework/data/mongodb/core/mapping/Document;", true);
//注释参数
av.visit("collection", "uc_members");
av.visitEnd();
//构造函数
MethodVisitor mw = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null,null);
mw.visitVarInsn(ALOAD, 0);
mw.visitMethodInsn(INVOKESPECIAL, "com/xxx/model/LeakInfo", "<init>", "()V");
mw.visitInsn(RETURN);
mw.visitMaxs(1, 1);
mw.visitEnd(); //字段
FieldVisitor fv = cw.visitField(ACC_PUBLIC, "description", "Ljava/lang/String;", null, null);
fv.visitEnd(); byte[] code = cw.toByteArray(); //将二进制流写到本地磁盘上
FileOutputStream fos = new FileOutputStream("E:/asm/bin/com/xxx/model/_766ComLeakInfo.class");
fos.write(code);
fos.close(); BeanTest2 loader = new BeanTest2();
Class<?> clazz = loader.defineClass(null, code, 0, code.length);
Object beanObj = clazz.getConstructor().newInstance(); clazz.getField("description").set(beanObj, "Adobe客户信息泄露!"); String nameString = (String) clazz.getField("description").get(beanObj);
System.out.println("filed value : " + nameString);
}
}

LeakInfo.java

import java.io.Serializable;

import org.springframework.data.mongodb.core.mapping.Document;

@SuppressWarnings("serial")
@Document
public class LeakInfo implements Serializable{ //@Id
long id;
String type;
String username;
String email;
String password;
String source;
String description; public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
} public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
} }

生成类

import org.springframework.data.mongodb.core.mapping.*;

@Document(collection = "uc_members")
public class _766ComLeakInfo extends LeakInfo
{
public String description;
}

最新文章

  1. Objective-c的@property(atomic,nonatomic,readonly,readwrite,assign,retain,copy,getter,setter) 属性特性
  2. 破解YunFile下载间隔10分钟/下载等待30秒
  3. 一道google面试题
  4. 一起学HTML基础-CSS样式表-基本概念、分类、选择器
  5. windows必备,命令行工具cmder
  6. 整合UMDH结果的一个小工具
  7. C51-keil编译常见错误和警告处理53
  8. Inno Setup设定只运行一个安装包
  9. PetaPoco 快速上手
  10. 【转】PV3D的小练习~太阳系八大行星
  11. 完整的WebRTC调用序列图
  12. React相关:npm,ES6,
  13. js的一些方法
  14. 深入理解linux内核v4l2框架之videobuf2【转】
  15. 洛谷 P1135 奇怪的电梯 【基础BFS】
  16. WebSphere禁用SSLv3和RC4算法教程
  17. 监控hdfs 块迁移数量脚本及 metasave 日志内容详解
  18. Async Await异步调用WebApi
  19. iOS编程中比较两个日期的大小
  20. JVM学习网址(收集总结)

热门文章

  1. 讲一讲Servlet和JSP的关系
  2. 什么是socket?
  3. JAVA程序员常用英语
  4. 命令行下IIS的配置脚本Adsutil.vbs
  5. ansj
  6. jQuery垂直二级导航菜单代码
  7. linux 设备驱动分类
  8. Java多线程及线程状态转换
  9. Java中字节流和字符流复制文件
  10. Java用户输入数值,做简单的猜数字游戏,导入基础的工具包util