java代码动态生成java的class文件.docx
《java代码动态生成java的class文件.docx》由会员分享,可在线阅读,更多相关《java代码动态生成java的class文件.docx(19页珍藏版)》请在冰豆网上搜索。
![java代码动态生成java的class文件.docx](https://file1.bdocx.com/fileroot1/2022-12/18/bef79958-991a-4d54-a23c-83851ee31217/bef79958-991a-4d54-a23c-83851ee312171.gif)
java代码动态生成java的class文件
目录
需要包:
2
工具类POBuildUtil2
工具类BuildUtil6
工具类Assistant8
RenderClass:
27
使用例子:
29
需要包:
1.apache-commons-lang-**.jar
2.asm-**.jar
工具类POBuildUtil
importjava.io.File;
importjava.io.FileOutputStream;
importjava.util.Collection;
importjava.util.Iterator;
importmons.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,"","()V",null,null);
mw.visitVarInsn(ALOAD,0);
mw.visitMethodInsn(INVOKESPECIAL,"java/lang/Object","","()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;
}
}
工具类BuildUtil
publicclassBuildUtil{
publicstaticStringtransferClassName(Classcls)
{
Stringclsname=cls.getName();
returnclsname.replace('.','/');
}
publicstaticStringtransferClassName(Stringclsname)
{
returnclsname.replace('.','/');
}
}
一.工具类BuildProperty
publicclassBuildProperty{
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;
}
}
工具类Assistant
importjava.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=.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;
else
returnfalse;
}
publicstaticvoidwriteFileContent(Stringpath,Stringcontent)throwsException
{
Filefile=newFile(path);
if(!
file.exists())
file.createNewFile();
OutputStreamWriterwrite=newOutputStreamWriter(newFileOutputStream(file),"GBK");
BufferedWriterwriter=newBufferedWriter(write);
writer.write(content);
writer.close();
write.close();
}
publicstaticStringgetFileContent(Stringurl,ServletContextcontext)throwsException
{
Stringfilepath=getFullPath(url,context);
returngetFileContent(filepath);
}
publicstaticStringgetFileContent(Stringpath)throwsException
{
StringBufferbuf=newStringBuffer();
Filefile=newFile(path);
if(file.exists())
{
InputStreamReaderread=newInputStreamReader(newFileInputStream(file),"GBK");
BufferedReaderreader=newBufferedReader(read);
try
{
Stringcontent=reader.readLine();
while(content!
=null)
{
buf.append(content);
content=reader.readLine();
}
}finally
{
if(reader!
=null)
reader.close();
if(read!
=null)
read.close();
}
}
returnbuf.toString();
}
//���ڼ�(����)
publicstaticjava.util.DateaddTimeByDay(java.util.Datedate,intdays)throwsException
{
Calendarcalendar=Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DATE,calendar.get(Calendar.DATE)+days);
returncalendar.getTime();
}
publicstaticjava.util.DateaddTimeByMinutes(java.util.Datedate,intminutes)throwsException
{
Calendarcalendar=Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.MINUTE,calendar.get(Calendar.MINUTE)+minutes);
returncalendar.getTime();
}
publicstaticjava.util.DateaddTimeBySeconds(java.util.Datedate,intseconds)throwsException
{
Calendarcalendar=Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.SECOND,calendar.get(Calendar.SECOND)+seconds);
returncalendar.getTime();
}
publicstaticjava.util.DatenowTime()throwsException
{
SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd");
Stringdatestr=sdf.format(java.util.Calendar.getInstance().getTime());
returnsdf.parse(datestr);
}
publicstaticjava.util.DatenowFullTime()throwsException
{
SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:
mm:
ss");
Stringdatestr=sdf.format(java.util.Calendar.getInstance().getTime());
returnsdf.parse(datestr);
}
publicstaticjava.util.DatenowFullTime(Stringformat)throwsException
{
SimpleDateFormatsdf=newSimpleDateFormat(format);
Stringdatestr=sdf.format(java.util.Calendar.getInstance().getTime());
returnsdf.parse(datestr);
}
publicstaticStringconvertDateStrToString(Stringdatestr,Stringformat)throwsException
{
Stringresult=null;
SimpleDateFormatsdf=newSimpleDateFormat(format);
try
{
result=sdf.format(sdf.parse(datestr));
}
catch(Exceptionex)
{
sdf=newSimpleDateFormat("yyyy-MM-dd");
result=sdf.format(sdf.parse(datestr));
}
returnresult;
}
publicstaticStringconvertDateToString(java.util.Datedate,Stringformat)throwsException
{
SimpleDateFormatsdf=newSimpleDateFormat(format);
returnsdf.format(date);
}
publicstaticjava.util.DateformatDateStr(Stringdatestr)throwsException
{
SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd");
returnsdf.parse(datestr);
}
publicstaticjava.util.DateformatDateStr(Stringdatestr,Stringformat)throwsException
{
java.util.Dateresult=null;
SimpleDateFormatsdf=newSimpleDateFormat(format);
try
{
result=sdf.parse(datestr);
}
catch(Exceptionex)
{
sdf=newSimpleDateFormat("yyyy-MM-dd");
result=sdf.parse(datestr);
}
returnresult;
}
publicstaticjava.util.DateformatFullDateStr(Stringdatestr)throwsException
{
java.util.Dateresult=null;
SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:
mm:
ss");
try
{
result=sdf.parse(datestr);
}
catch(Exceptionex)
{
sdf=newSimpleDateFormat("yyyy-MM-dd");
result=sdf.parse(datestr);
}
returnresult;
}
publicstaticStringgetFileName(Stringfilepath)
{
filepath=filepath.replace('/','\\');
Stringfilename=filepath;
if(filepath.lastIndexOf('\\')>0)
{
filename=filepath.substring(filepath.lastIndexOf('\\')+1);
}
returnfilename;
}
publicstaticvoidcopy(ServletContextcontext,Stringform,Stringto,booleanremoveold)throwsjava.io.IOException
{
copy(getFullPath(form,context),getFullPath(to,context),removeold);
}
//�ļ��������ƶ�����removeold�Ƿ�ɾ��ԭ�ļ�
publicst