[code="java"]
public Class build(String clsname,String savepath,Collection properties){
Class clz=null;
try {
String className = clsname.replace(".", "/");
// 创建类信息
ClassWriter cw = new ClassWriter(0);
//申明类名 以及 访问修饰符
cw.visit(V1_5, ACC_PUBLIC + ACC_SUPER, className, null, "java/lang/Object", null);
//建立构造函数
MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "", "()V", null, null);
mv.visitCode();
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "", "()V");
mv.visitInsn(RETURN);
mv.visitMaxs(1, 1);
mv.visitEnd();
FiledInfo filed = null;
String fileName = null;
String fileType = null;
Iterator iterator = properties.iterator();
while(iterator.hasNext()){
filed = (FiledInfo)iterator.next();
fileName = WordUtils.capitalize(filed.getName()); // 首字母大写
fileType = filed.getType().replace(".", "/");;
//建立属性对应的类变量
cw.visitField(ACC_PRIVATE, filed.getName(), "L"+fileType+";", null, null).visitEnd();
// get方法
mv=cw.visitMethod(ACC_PUBLIC, "get"+fileName, "()L"+fileType+";", null, null);
mv.visitCode();
mv.visitVarInsn(ALOAD, 0);
mv.visitFieldInsn(GETFIELD, className, filed.getName(), "L"+fileType+";");
mv.visitInsn(ARETURN);
mv.visitMaxs(1, 1);
mv.visitEnd();
// set方法
mv=cw.visitMethod(ACC_PUBLIC, "set"+fileName, "(L"+fileType+";)V", null, null);
mv.visitCode();
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(ALOAD, 1);
mv.visitFieldInsn(PUTFIELD, className, filed.getName(), "L"+fileType+";");
mv.visitMaxs(2, 2);
mv.visitInsn(RETURN);
mv.visitEnd();
}
cw.visitEnd();
// 输出class文件
byte[] code=cw.toByteArray();
if(savepath!=null){
int pos = savepath.lastIndexOf("\\");
String dir = savepath.substring(0,pos);
File directory =new File(dir);
if (!directory.exists())
directory.mkdirs();
File file = new File(savepath);
if (file.exists()){
file.createNewFile();
}else{
file.delete();
}
FileOutputStream fos = new FileOutputStream(file);
fos.write(code);
fos.close();
}
clz = this.defineClass(clsname, code, 0, code.length);
} catch (Exception e) {
}
return clz;
}
[/code]
[url]http://name327.iteye.com/blog/1554558[/url]
[url]http://blog.sina.com.cn/s/blog_7010db8c0100mt04.html[/url]
[url]http://www.iteye.com/topic/197752[/url]