freemarker代码生成

本文介绍如何使用Freemarker实现代码自动生成的过程。通过创建特定的Exporter子类,并定义模板文件,可以针对不同的需求生成相应的配置文件。文章详细解释了TitanPluginExporter类的实现方式及其在向导中的应用。


freemarker代码生成 2009-07-09 18:06:38


分类: Linux


代码生成


用一事例讲解代码生成

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"?>

<titanplugin>

<basicinfo domainname="<#if webproject.getDomainName().equals("")> <#else> ${webproject.getDomainName()} </#if>"/>

</titanplugin>


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();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值