java代码动态生成java的class文件.docx

上传人:b****3 文档编号:5531429 上传时间:2022-12-18 格式:DOCX 页数:19 大小:19.03KB
下载 相关 举报
java代码动态生成java的class文件.docx_第1页
第1页 / 共19页
java代码动态生成java的class文件.docx_第2页
第2页 / 共19页
java代码动态生成java的class文件.docx_第3页
第3页 / 共19页
java代码动态生成java的class文件.docx_第4页
第4页 / 共19页
java代码动态生成java的class文件.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

java代码动态生成java的class文件.docx

《java代码动态生成java的class文件.docx》由会员分享,可在线阅读,更多相关《java代码动态生成java的class文件.docx(19页珍藏版)》请在冰豆网上搜索。

java代码动态生成java的class文件.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1