zoukankan      html  css  js  c++  java
  • java自动生成代码

    看到这个标题,如果你以为真的可以完全自动生成,那你就太Naive啦

    我这里想介绍的是,利用模板生成我们需要的代码

    一、模板

    首先来说说模板,常见的java模板有:FreeMarker、Velocity、Jamon、JByte等等。

    不熟悉的可以百度下,其实我了解也不多,哈哈。

    二、原理

    其实就是利用模板,填充数据,得到我们需要的代码。即:输出=模板+数据

    三、实例

    实例利用FreeMarker来做的,所以你需要先导入freemarker的jar包

    假设我们需要自动生成一个java bean,那么我们的模板(formBean.ftl)可能是下面这个样子的

    public class ${beanName?cap_first}Form {
        
    <#list params as param>
        private ${param.paramType} ${param.paramName};
        public void set${param.paramName?cap_first}(${param.paramType} ${param.paramName}){
            this.${param.paramName} = ${param.paramName};
        }
        
        public ${param.paramType} get${param.paramName?cap_first}(){
            return this.${param.paramName};
        }
        
    </#list>
    }

    其中cap_first的作用是使首字母大写,这些都是ftl中的方法,可以百度谷歌之

    接下来上拼装数据,生成文件的Demo

    // 拼装数据
    Map<String, Object> formBeanMap = new HashMap<String, Object>();
    formBeanMap.put("beanName", "testBean");
    List<Map<String, String>> paramsList = new ArrayList<Map<String, String>>();
     for (int i = 0; i < 4; i++) {
           Map<String, String> tmpParamMap = new HashMap<String, String>();
           tmpParamMap.put("paramType", "String");
           tmpParamMap.put("paramName", "param" + i);
            paramsList.add(tmpParamMap);
    }
    formBeanMap.put("params", paramsList);
    
    freemarker.template.Configuration config = new freemarker.template.Configuration();
    config.setObjectWrapper(new DefaultObjectWrapper());
    Template formBeanTemplate = config.getTemplate("formBean.ftl", "UTF-8");
    
    Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("c:\TestBeanForm.java"), "UTF-8"));
    formBeanTemplate.process(formBeanMap, out);
    out.flush();
    out.close();

    执行formBeanTemplate.process之后,就可以根据模板、数据生成代码了。

  • 相关阅读:
    STL源码剖析之_allocate函数
    PAT 1018. Public Bike Management
    PAT 1016. Phone Bills
    PAT 1012. The Best Rank
    PAT 1014. Waiting in Line
    PAT 1026. Table Tennis
    PAT 1017. Queueing at Bank
    STL源码剖析之list的sort函数实现
    吃到鸡蛋好吃,看看是哪只母鸡下的蛋:好用的Sqlite3
    cJSON
  • 原文地址:https://www.cnblogs.com/yejg1212/p/4322452.html
Copyright © 2011-2022 走看看