开发者

Java模板引擎生成代码的几种常见方式及其使用方法

开发者 https://www.devze.com 2025-08-22 10:22 出处:网络 作者: 爱的叹息
目录1. FreeMarker优点:缺点:Maven依赖:示例代码:2. Apache Velocity优点:缺点:Maven依赖:示例代码:3. Thymeleaf优点:缺点:Maven依赖:示例代码:总结表格这个问题是关于Java中使用模板引擎生成代码的方式
目录
  • 1. FreeMarker
    • 优点:
    • 缺点:
    • Maven依赖:
    • 示例代码:
  • 2. Apache Velocity
    • 优点:
    • 缺点:
    • Maven依赖:
    • 示例代码:
  • 3. Thymeleaf
    • 优点:
    • 缺点:
    • Maven依赖:
    • 示例代码:
  • 总结表格

    这个问题是关于Java中使用模板引擎生成代码的方式,本文我将为您详细介绍几种常见的Java模板引擎及其使用方法。

    在Java中,有多种模板引擎可以用于代码生成,包括FreeMarker、Velocity、Thymeleaf等。下面我将详细介绍每种方式的优缺点,并提供完整的代码示例

    1. FreeMarker

    FreeMarker是一个用Java编写的模板引擎,最初专注于使用MVC软件架构生成Web页面。但FreeMarker也可以用于非Web应用程序环境,如代码生成。

    优点:

    • 模板语言功能强大,易于学习
    • 不依赖Web环境,可以独立使用
    • 性能良好
    • 模板缓存机制高效

    缺点:

    • 学习曲线相较于其他模板引擎略陡峭
    • 错误提示不够友好

    Maven依赖:

    <dependency>
        <groupId>org.freemarker</groupId>
        <artifactId>freemarker</artifactId>
        <version>2.3.32</version>
    </dependency>
    

    示例代码:

    import freemarker.template.Configuration;
    import freemarker.template.Template;
    import freemarker.template.TemplateException;
    
    import java.io.*;
    import java.util.HashMap;
    import java.util.Map;
    
    public class FreeMarkerCodeGenerator {
        public static void main(String[] args) throws IOException, TemplateException {
            // 创建配置实例
            Configuration cfg = new Configuration(Configuration.VERSION_2_3_32);
            
            // 设置模板文件目录
            cfg.setDirectoryForTemplateLoading(new File("src/main/resources/templates"));
            
            // 设置默认编码
            cfg.setDefaultEncoding("UTF-8");
            
            // 获取模板
            Template template = cfg.getTemplate("code-template.ftl");
            
            // 准备数据模型
            Map<String, Object> dataModel = new HashMap<>();
            dataModel.put("className", "User");
            dataModel.put("packageName", "com.example.model");
            dataModel.put("fields", new String[]{"id", "name", "email"});
            
            // 输出文件
            Writer fileWriter = new FileWriter(new File("User.java"));
            template.process(dataModel, fileWriter);
            fileWriter.close();
            
            System.out.println("代码生成完成!");
        }
    }
    

    模板文件 (src/main/resources/templates/code-template.ftl):

    package ${packageName};
    
    public class ${className} {
    <#list fields as field>
        private String ${field};
    </#list>
    
    <#list fields as field>
        public String get${field?cap_first}() {
            return ${field};
        }
    
        public void set${field?cap_first}(String ${field}) {
            this.${field} = ${field};
        }
    </#list>
    }
    

    2. Apache Velocity

    Velocity是Apache软件基金会提供的一个基于Java的模板引擎,使用简单模板语言来引用由Java代码定义的对象。

    优点:

    • 语法简洁
    • 与FreeMarker相比,语法更简单
    • 社区活跃,文档丰富

    缺点:

    • 功能相较于FreeMarker略显简单
    • 更新频率较低

    Maven依赖:

    <dependency>
        <groupId>org.apache.velocity</groupId>
        <artifactId>velocity-engine-core</artifactId>
        <version>2.3</versjsion>
    </dependency>
    

    示例代码:

    import org.apache.velocity.Template;
    import org.apache.velocity.VelocityContext;
    import org.apache.velocity.app.VelocityEngine;
    import org.apache.velocity.runtime.RuntimeServices;
    import org.apache.velocity.runtime.RuntimeSingleton;
    import org.apache.velocity.runtime.parser.ParseException;
    import org.apache.velocity.runtime.parser.node.SimpleNode;
    
    import java.io.*;
    import java.util.Properties;
    
    public class VelocityCodeGenerator {
        public static void main(String[] args) throws IOException, ParseException {
           zRpmhWaksu // 初始化Velocity引擎
            Properties props = new Properties();
            props.setProperty("resource.loader", "file");
            props.setProperty("file.resource.loader.class", 
                "org.apache.velocity.runtime.resource.loader.FileResourceLoader");
            props.setProperty("file.resource.loader.path", "src/main/resources/templates");
            
            VelocityEngine ve = new VelocityEngine(props);
            ve.init();
            
           js // 获取模板
            Template template = ve.getTemplate("velocity-template.vm");
            
            // 创建上下文并添加数据
            VelocityContext context = new VelocityContext();
            context.put("className", "Product");
            context.put("packageName", "com.example.model");
            String[] fields = {"id", "name", "price"};
            context.put("fields", fields);
            
            // 输出生成的代码
            Writer writer = new FileWriter("Product.java");
            template.merge(context, writer);
            writer.close();
            
            System.out.println("Velocity代码生成完成!");
        }
    }
    

    模板文件 (src/main/resources/templates/velocity-template.vm):

    package $packageName;
    
    public class $className {
    #foreach($field in $fields)
        private String $field;
    #end
    
    #foreach($field in $fields)
        public String get${field.substring(0,1).toUpperCase()}${field.substring(1)}() {
            return $field;
        }
    
        public void set${field.substring(0,1).toUpperCase()}${field.substring(1)}(String $field) {
            this.$field = $field;
        }
    #end
    }
    

    3. Thymeleaf

    Thymeleaf是一个现代化的服务器端Java模板引擎,能够处理html、XML、javascript、css甚至纯文本。

    优点:

    • 与Spring框架集成良好
    • 支持自然模板(可以在浏览器中直接打开)
    • 功能丰富,支持表达式、条件语句、循环等

    缺点:

    • 相对于其他模板引擎,较为重量级
    • 主要用于Web开发,用于代码生成略显复杂

    Maven依赖:

    <dependency>
        <groupId>org.thymeleaf</groupId>
        <artifactId>thymeleaf</artifactId>
        <version>3.1.2.RELEASE</version>
    </dependency>
    

    示例代码:

    import org.thymeleaf.TemplateEngine;
    import org.thymeleaf.context.Context;
    import org.thymeleaf.templateresolver.FileTemplateResolver;
    
    import javwww.devze.coma.io.FileWriter;
    import java.io.IOException;
    import java.io.Writer;
    import java.util.Arrays;
    import java.util.HashMap;
    import java.util.Map;
    
    public class ThymeleafCodeGenerator {
        public static void main(String[] args) throws IOException {
            // 配置模板引擎
            TemplateEngine templateEngine = new TemplateEngine();
            FileTemplateResolver templateResolver = new FileTemplateResolver();
            templateResolver.setPrefix("src/main/resources/templates/");
            templateResolver.setSuffix(".html");
            templateResolver.setTemplateMode("TEXT");
            templateResolver.setCharacterEncoding("UTF-8");
            templateEngine.setTemplateResolver(templateResolver);
            
            // 创建上下文
            Context context = new Context();
            context.setVariable("className", "Order");
            context.setVariable("packageName", "com.example.model");
            context.setVariable("fields", Arrays.asList("id", "customerName", "totalAmount"));
            
            // 处理模板
            String result = templateEngine.process("thymeleaf-template", context);
            
            // 写入文件
            Writer writer = new FileWriter("Order.java");
            writer.write(result);
            writer.close();
            
            System.out.println("Thymeleaf代码生成完成!");
        }
    }
    

    模板文件 (src/main/resources/templates/thymeleaf-template.html):

    package [( ${packageName} )];
    
    public class [( ${className} )] {
    [# th:each="field : ${fields}"]
        private String [( ${field} )];[/]
    
    [# th:each="field : ${fields}"]
        public String get[( ${#strings.capitalize(field)} )]() {
            return [( ${field} )];
        }
    
        public void set[( ${#strings.capitalize(field)} )](String [( ${field} )]) {
            this.[( ${field} )] = [( ${field} )];
        }
    [/]
    }
    

    总结表格

    模板引擎优点缺点js适用场景
    FreeMarker功能强大,性能好,不依赖Web环境学习曲线较陡,错误提示不够友好通用代码生成,Web页面生成
    Velocity语法简洁,易于上手功能相对简单,更新频率较低简单代码生成,配置文件生成
    Thymeleaf与Spring集成好,支持自然模板较为重量级,主要用于Web开发Web应用中的代码生成,与Spring集成的项目

    每种模板引擎都有其特点和适用场景,选择时应根据项目需求、团队熟悉度和具体应用场景来决定。对于一般的代码生成任务,FreeMarker和Velocity是较为常见的选择,而如果项目已经使用了Spring框架,Thymeleaf可能是一个更好的选择。

    以上就是Java模板引擎生成代码的几种常见方式及其使用方法的详细内容,更多关于Java模板引擎生成代码的资料请关注编程客栈(www.devze.com)其它相关文章!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号