学习开发代码生成器(一)--使用FreeMarker开发代码生成器
什么是代码生成器
代码生成器:可以生成代码的程序
代码生成器=模板+数据+合成机制。Tomcat内部就有一个代码生成器可以生成HTML代码,客户端访问时,访问到的实际是Tomcat根据JSP(一种模板文件)和数据生成了静态的HTML代码。
为什么需要代码生成器
(1)节省人力成本
(2)易于代码规范控制
什么是FreeMarker
FreeMarker是一款模板引擎: 即一种基于模板和数据,并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。
使用FreeMarker开发代码生成器步骤
开发代码生成器步骤
(1)创建一个Maven项目,添加FreeMarker依赖
(2)创建一个Java类。
(3)创建init方法,使用FreeMaker的Configuration类,初始化环境
--Configuration常用API
方法名称 | 参数 | 描述 |
---|---|---|
Configuration(Version incomp atibleImprovements ) | Version(可以通过Configuration.getVersion获取) | 生成Configuration类的对象 |
setDirectoryForTemplateLoadi ng(File dir) | File | 设置模板所在目录 |
getTemplate(String file) | String | 设置模板文件名称 |
(4)创建process方法,实例化模板(Template),执行代码生成
--使用Configuration的getTemplate(String file)方法,实例化Template
--Template常用API
方法名称 | 参数 | 描述 |
---|---|---|
process(Object data, Writer out) | Object,Writer | 生成数据文件 |
(5)在设置的模板所在目录下,创建模板文件
(6)测试
具体实现步骤
--》创建一个Maven项目
-->设置<packaging>jar</packaging>,添加freemaker依赖
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
--》创建一个Generator的Java类,添加如下代码
import freemarker.template.Configuration;
import freemarker.template.Template;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.util.Map;
/**
* Created by Anna. on 2019/5/13 0013.
*/
public class Generator {
private Configuration configuration = new Configuration(Configuration.getVersion());
/**
* 1、初始化配置
*/
public void init(){
try {
configuration = new Configuration(Configuration.getVersion());
// 获取Resources目录路径
String path = this.getClass().getClassLoader().getResource("").getPath();
// 设置模板所在文件夹
configuration.setDirectoryForTemplateLoading(new File(path));
}catch (Exception e){
e.printStackTrace();
}
}
/**
* 2、获取模板生成相应数据
*/
public void process(Map<String, Object> param, String tempName, String fileDir){
try {
// 设置模板文件名称
Template template = configuration.getTemplate(tempName);
FileOutputStream fos = new FileOutputStream(fileDir);
// 生成数据文件
template.process(param,new OutputStreamWriter(fos));
}catch (Exception e){
e.printStackTrace();
}
}
}
--》在Resource目录下新建Hello.ftl模板文件,添加代码如下
<html>
<head></head>
<body>
Hello ${name} !
</body>
</html>
--》Generator类中,添加测试方法,代码如下
public static void main(String[] args) {
Generator generator = new Generator();
// 初始化环境
generator.init();
// 创建数据
Map<String,Object> param = new HashMap<String, Object>();
param.put("name","Tom");
// 设置文件生成路径
String path = "D:/test/generator/test.html";
// 设置模板文件名称
String filename = "Hello.ftl";
// 获取模板生成相应数据生成文件
generator.process(param,filename,path);
}
--》执行main方法,生成文件
--》查看测试文件
--》完成
附件
链接:https://pan.baidu.com/s/1hpfoXYg9P1gAv6A8fxcaTg
提取码:lym4