基于 Eclipse 平台的代码生成技术
2010-07-02 00:00:00 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閹冣挃闁硅櫕鎹囬垾鏃堝礃椤忎礁浜鹃柨婵嗙凹缁ㄧ粯銇勯幒瀣仾闁靛洤瀚伴獮鍥敍濮f寧鎹囬弻鐔哥瑹閸喖顬堝銈庡亝缁挸鐣烽崡鐐嶆棃鍩€椤掑嫮宓佸┑鐘插绾句粙鏌涚仦鎹愬闁逞屽墰閹虫捇锝炲┑瀣╅柍杞拌兌閻ゅ懐绱撴担鍓插剱妞ゆ垶鐟╁畷銉р偓锝庡枟閻撴洘銇勯幇闈涗簼缂佽埖姘ㄧ槐鎾诲礃閳哄倻顦板┑顔硷工椤嘲鐣烽幒鎴旀瀻闁规惌鍘借ⅵ濠电姷鏁告慨顓㈠磻閹剧粯鈷戞い鎺嗗亾缂佸鏁婚獮鍡涙倷閸濆嫮顔愬┑鐑囩秵閸撴瑦淇婇懖鈺冪<闁归偊鍙庡▓婊堟煛鐏炵硶鍋撻幇浣告倯闁硅偐琛ラ埀顒冨皺閺佹牕鈹戦悙鏉戠仸闁圭ǹ鎽滅划鏃堟偨缁嬭锕傛煕閺囥劌鐏犻柛鎰ㄥ亾婵$偑鍊栭崝锕€顭块埀顒佺箾瀹€濠侀偗婵﹨娅g槐鎺懳熺拠鑼舵暱闂備胶枪濞寸兘寮拠宸殨濠电姵纰嶉弲鎻掝熆鐠虹尨宸ョ€规挸妫濆铏圭磼濡搫顫嶇紓浣风劍閹稿啿鐣烽幋锕€绠婚悹鍥у级瀹撳秴顪冮妶鍡樺鞍缂佸鍨剁粋宥夋倷椤掍礁寮垮┑鈽嗗灣閸樠勭妤e啯鍊垫慨妯煎亾鐎氾拷

import java.util.Date;
public class CLASS {
public String s = "Mission Completed!";
private Date getCurrentDate() {
return new Date();
}
public String generate(Object argument) {
return "";
}
}
在该文件中,我们 import java.util.Date 类,声明了 String s 及声明了方法 getCurrentDate(),这些内容将被合并到对模板文件进行编译后的代码中。此外,在文件中的类名“ CLASS ”在代码执行类中会被模板文件中的代码执行类类名替换。
将 demo1.jet 文件修改为以下内容,并将文件另存为 demo2.jet 。
清单 5. demo2.jet
<%@jet package="demo.translated" imports="java.util.List" class="Demo2"
skeleton="demo.skeleton"%>
Hello, <%=((List)argument).get(0).toString()%>!
The current time is <%=getCurrentDate()%>.
<%=s%>
经 JET 编译后的模板文件代码内容如下,其中红色文字为利用骨架合并的效果。
清单 6. 模板文件代码
package demo.translated;
import java.util.Date;
import java.util.List;
public class Demo2 {
protected static String nl;
public static synchronized Demo1 create(String lineSeparator)
{
nl = lineSeparator;
Demo2 result = new Demo2();
nl = null;
return result;
}
public final String NL = nl == null ?
(System.getProperties().getProperty("line.separator")) : nl;
protected final String TEXT_1 = "Hello, ";
protected final String TEXT_2 = "!" + NL + "The current time is ";
protected final String TEXT_3 = ". ";
protected final String TEXT_4 = NL;
protected final String TEXT_5 = NL;
public String s = "Mission Completed!";
private Date getCurrentDate() {
return new Date();
}
public String generate(Object argument)
{
final StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(TEXT_1);
stringBuffer.append(((List)argument).get(0).toString());
stringBuffer.append(TEXT_2);
stringBuffer.append(getCurrentDate());
stringBuffer.append(TEXT_3);
stringBuffer.append(TEXT_4);
stringBuffer.append(s);
stringBuffer.append(TEXT_5);
return stringBuffer.toString();
}
}
更多精彩
赞助商链接