您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > java代码动态生成java的.class文件
目录需要包:..........................................................................................................................................2工具类POBuildUtil.........................................................................................................................2工具类BuildUtil..............................................................................................................................6工具类Assistant...............................................................................................................................8RenderClass:................................................................................................................................27使用例子:....................................................................................................................................29需要包:1.apache-commons-lang-**.jar2.asm-**.jar工具类POBuildUtilimportjava.io.File;importjava.io.FileOutputStream;importjava.util.Collection;importjava.util.Iterator;importorg.apache.commons.lang.WordUtils;importorg.objectweb.asm.ClassWriter;importorg.objectweb.asm.MethodVisitor;importorg.objectweb.asm.Opcodes;publicclassPOBuildUtilextendsClassLoaderimplementsOpcodes{publicClassbuild(Stringclsname,Stringsavepath,Collectionproperties){Classcls=null;try{Stringclassname=BuildUtil.transferClassName(clsname);ClassWritercw=newClassWriter(false);cw.visit(V1_1,ACC_PUBLIC,classname,null,java/lang/Object,null);MethodVisitormw=cw.visitMethod(ACC_PUBLIC,init,()V,null,null);mw.visitVarInsn(ALOAD,0);mw.visitMethodInsn(INVOKESPECIAL,java/lang/Object,init,()V);mw.visitInsn(RETURN);mw.visitMaxs(1,1);mw.visitEnd();BuildPropertyproperty=null;Stringpropertytype=null;Stringpropertyname=null;;Iteratoriterator=properties.iterator();while(iterator.hasNext()){property=(BuildProperty)iterator.next();propertytype=BuildUtil.transferClassName(property.getType());propertyname=WordUtils.capitalize(property.getName());//System.out.println(propertyname);cw.visitField(ACC_PRIVATE,property.getName(),L+propertytype+;,null,null).visitEnd();mw=cw.visitMethod(ACC_PUBLIC,get+propertyname,()L+propertytype+;,null,null);mw.visitCode();mw.visitVarInsn(ALOAD,0);mw.visitFieldInsn(GETFIELD,classname,property.getName(),L+propertytype+;);mw.visitInsn(ARETURN);mw.visitMaxs(1,1);mw.visitEnd();mw=cw.visitMethod(ACC_PUBLIC,set+propertyname,(L+propertytype+;)V,null,null);mw.visitCode();mw.visitVarInsn(ALOAD,0);mw.visitVarInsn(ALOAD,1);mw.visitFieldInsn(PUTFIELD,classname,property.getName(),L+propertytype+;);mw.visitMaxs(2,2);mw.visitInsn(RETURN);mw.visitEnd();}cw.visitEnd();byte[]code=cw.toByteArray();if(savepath!=null){Assistant.createNewFile(savepath);FileOutputStreamfos=newFileOutputStream(savepath);fos.write(code);fos.close();}cls=this.defineClass(clsname,code,0,code.length);returncls;}catch(Throwablee){e.printStackTrace();}returncls;}}工具类BuildUtilpublicclassBuildUtil{publicstaticStringtransferClassName(Classcls){Stringclsname=cls.getName();returnclsname.replace('.','/');}publicstaticStringtransferClassName(Stringclsname){returnclsname.replace('.','/');}}一.工具类BuildPropertypublicclassBuildProperty{privateStringname;privateStringtype;publicBuildProperty(){}publicBuildProperty(Stringname,Stringtype){this.name=name;this.type=type;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicStringgetType(){returntype;}publicvoidsetType(Stringtype){this.type=type;}}工具类Assistantimportjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.InputStreamReader;importjava.io.OutputStreamWriter;importjava.text.SimpleDateFormat;importjava.util.Calendar;importjavax.servlet.ServletContext;importjavax.servlet.http.HttpServletRequest;importorg.apache.log4j.Logger;publicclassAssistant{privatestaticfinalLoggerlog=Logger.getLogger(Assistant.class);publicstaticStringconvertRequestParameter(Stringparameter)throwsException{returnconvertRequestParameter(parameter,null);}publicstaticStringconvertRequestParameter(Stringparameter,Stringformat)throwsException{if(parameter!=null){if(format==null)format=utf-8;parameter=java.net.URLDecoder.decode(parameter,format);}returnparameter;}publicstaticbooleannotEmpty(HttpServletRequestrequest,Stringkey){if(request.getParameter(key)!=null&&request.getParameter(key).length()0){returntrue;}else{returnfalse;}}publicstaticvoidwriteFileContent(Stringurl,Stringcontent,ServletContextcontext)throwsException{writeFileContent(getFullPath(url,context),content);}publicstaticStringHTMLEncode(Stringtxt){if(txt!=null&&txt.length()0){txt=txt.replaceAll(&,&);txt=txt.replaceAll(,<);txt=txt.replaceAll(,>);txt=txt.replaceAll(\,");txt=txt.replaceAll(',);}returntxt;}publicstaticbooleanexistFile(Stringurlpath,ServletContextcontext){Filefile=newFile(getFullPath(urlpath,context));if(file.exists())returntrue;elsereturnfalse;}publicstaticvoidwriteFileContent(Stringpath,Stringcontent)throwsException{Filefile=newF
本文标题:java代码动态生成java的.class文件
链接地址:https://www.777doc.com/doc-6496132 .html