freemarker代码生成

代码生成

用一事例讲解代码生成

1. 首先写一个类,如TitanPluginExporter 让其继承GenericExporter类。在该类中有一个init方法,该方法的作用是设置模板的路径和生成文件的类型。

public class TitanPluginExporter extends GenericExporter {

protected void setupContext() {

super.setupContext();

}

public void doStart() {

super.doStart();

}

protected void init() {

setTemplateName("templates/config/generation/titanplugin_xml.ftl");

setFilePattern("{package-name}/{class-name}.xml");

}

public TitanPluginExporter() {

init();

}

}

2. GenericExporter类继承了AbstractExporter类,在该类中有一个方法

protected void exportPOJO(Map additionalContext) {

TemplateProducer producer = new TemplateProducer(getTemplateHelper(),

getArtifactCollector());

WebprojectVO webprojectVO = StaitcVO.getWebprojectVO();

additionalContext.put("webproject", StaitcVO.getWebprojectVO());

if (templateName == "templates/config/generation/webproject_project.ftl") {

producer.produce(additionalContext, getTemplateName(), new File(

getOutputDirectory(), resolve("", "")), templateName);

}

if (templateName == "templates/config/generation/webproject_classpath.ftl") {

producer.produce(additionalContext, getTemplateName(), new File(

getOutputDirectory(), resolve("", "")), templateName);

}

if (templateName == "templates/config/generation/titanplugin_xml.ftl") {

producer.produce(additionalContext, getTemplateName(), new File(

getOutputDirectory(), resolve("titanplugin", "")), templateName);

}

}

该方法的作用是判断是否是所要生成文件所使用模板,如果是为所要生成的文件设置包名和文件名。

3. 按照freemarker的规则,去写templates/config/generation/titanplugin_xml.ftl模板

<?xml version="1.0" encoding="UTF-8"?>

${webproject.getDomainName()} #if>"/>

4. 本例是结合了向导,所以在TitanNewWizard类的performFinish()中,写入

Exporter projectExporter = new ProjectExporter();

projectExporter.setOutputDirectory(folder);

webprojectVO.setWebprojectName(projectName);

webprojectVO.setDomainName(domainName);

Exporter classpathExporter = new ClasspathExporter();

classpathExporter.setOutputDirectory(folder);

Exporter titanpluginExporter = new TitanPluginExporter();

titanpluginExporter.setOutputDirectory(folder);

List exporters = new ArrayList();

exporters.add(0, projectExporter);

exporters.add(1, classpathExporter);

exporters.add(2, titanpluginExporter);

for (int i = 0; i < exporters.size(); i++) {

((Exporter) exporters.get(i)).start();

}

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13726712/viewspace-608777/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/13726712/viewspace-608777/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值