代码生成
用一事例讲解代码生成
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/