我从事过web开发工作,最近发现我写了几乎重复的代码,所以想在项目中添加代码生成器功能。 大致的想法如下。 ()数据模板) )。
构思的情节
这里使用的模块引擎是beetl (国民开发的,官网上有详细的文档。
让我们看看以生成bean java类为例的实现。
bean类文件的模板如下所示。
package #{bean.beanPackage};
//*
* @ author # { bean.bean author } # { bean.bean createtime }
*
*/
public class # { bean.bean class name } extendsabsbean {
参数.属性(for ) {
#
private # { param.type } # { param.name }; //#{param.remark}
参数.属性(for ) {
varfirstchar=str util.substring to (param.name,0,1 );
varfirstchar _ upper=str util.toupper case (first char );
var param name=str util.replace (param.name,firstChar,firstChar_upper );
#
公共字符串获取# { param name } (
return #{param.name};
}
公共void set # { param name } { string # { param.name } }
this.# { param.name }=# { param.name };
}
}
java代码如下所示。
公共类我的生成器{
publicstaticvoidmain (string [ ] args ) throws IOException {。
string root=system.getproperty (user.dir ) ) File.separator 'template; //模板路径
fileresourceloaderresourceloader=newfileresourceloader (root,' utf-8 ' );
配置CFG=配置. default configuration (;
grouptemplategt=new group template (resource loader,cfg );
MyGenerator t=new MyGenerator (;
t.getcodeforbean(gt,'/bean.template ); //
}
//*
*
* @param gt
* @ param文件路径模板路径
*/
privatevoidgetcodeforbean (grouptemplategt,string文件路径) {
template t=gt.get template (file path );
BeanOfBean bean=new BeanOfBean (;
bean.setbeanauthor('Tom );
bean.setbeanclassname (' testbean );
bean.setbeancreatetime(newdate ).toString );
bean.setbean package (com.space.test.bean );
List list=new ArrayList (;
ColumnBean b=new ColumnBean (;
b .设置名称(id ); //字段名称
b.setremark(id ); //字段注释
b .设置类型(string ); //字段类型
ColumnBean b2=new ColumnBean (;
B2.setname('name ); //字段名称
B2 .设置标记(名称); //字段注释
B2.settype(string ); //字段类型
list.add(b );
list.add(B2;
bean.setproperties(list;
t.binding('bean ',bean );
String str=t.render (;
system.out.println(str; //打印生成的代码
}
}
执行后从控制台输出的代码如下所示。
package com.space.test.bean;
//*
* @ authortommonsep 2616336036336059 CST 2016
*
*/
publicclasstestbeanextendsabsbean {
私有字符串id; //id
私有字符串名称; //名称
公共字符串获取
返回id;
}
公共void setid (stringid ) {
this.id=id;
}
公共字符串获取名称
return name;
}
公共void set name (string name ) {
this.name=name;
}
}
总而言之,代码生成器之一实际上是将数据嵌入到模板中,然后嵌入模板引擎进行使用。 或者,自己用代码实现。 这些模板引擎中的每一个都有自己的语法。 当然,效率和优点各不相同。