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

被折叠的 条评论
为什么被折叠?



