java生成字节码文件全过程:
Java 源码编译由以下三个过程组成:
1、分析和输入到符号表
2、注解处理
3、语义分析和生成class文件
流程图如下所示:
最后生成的class文件由以下部分组成:
结构信息。包括class文件格式版本号及各部分的数量与大小的信息
元数据。对应于Java源码中声明与常量的信息。包含类/继承的超类/实现的接口的声明信息、域与方法声明信息和常量池
方法信息。对应Java源码中语句和表达式对应的信息。包含字节码、异常处理器表、求值栈与局部变量区大小、求值栈的类型记录、调试符号信息
zip包,然后自动下载下来
1.预先定义好模板
2.界面输入相关参数
3.解析模板生成代码并下载
最后放出源代码:
package com.et.controller.system.createcode
import java.util.ArrayList
import java.util.Date
import java.util.HashMap
import java.util.List
import java.util.Map
import javax.servlet.http.HttpServletResponse
import org.springframework.stereotype.Controller
import org.springframework.web.bind.annotation.RequestMapping
import com.et.controller.base.BaseController
import com.et.util.DelAllFile
import com.et.util.FileDownload
import com.et.util.FileZip
import com.et.util.Freemarker
import com.et.util.PageData
import com.et.util.PathUtil
/**
* 类名称:FreemarkerController
* 创建人:Harries
* 创建时间:2015年1月12日
* @version
*/
@Controller
@RequestMapping(value=”/createCode”)
public class CreateCodeController extends BaseController {
/**
* 生成代码
*/
@RequestMapping(value=”/proCode”)
public void proCode(HttpServletResponse response) throws Exception{
PageData pd = new PageData()
pd = this.getPageData()
/* ============================================================================================= */
String packageName = pd.getString(“packageName”)//包名 ========1
String objectName = pd.getString(“objectName”)//类名 ========2
String tabletop = pd.getString(“tabletop”)//表前缀 ========3
tabletop = null == tabletop?””:tabletop.toUpperCase()//表前缀转大写
String zindext = pd.getString(“zindex”)//属性总数
int zindex = 0
if(null != zindext &&!””.equals(zindext)){
zindex = Integer.parseInt(zindext)
}
List<String[]>fieldList = new ArrayList<String[]>()//属性集合 ========4
for(int i=0i<zindexi++){
fieldList.add(pd.getString(“field”+i).split(“,fh,”))//属性放到集合里面
}
Map<String,Object>root = new HashMap<String,Object>()//创建数据模型
root.put(“fieldList”, fieldList)
root.put(“packageName”, packageName)//包名
root.put(“objectName”, objectName)//类名
root.put(“objectNameLower”, objectName.toLowerCase())//类名(全小写)
root.put(“objectNameUpper”, objectName.toUpperCase())//类名(全大写)
root.put(“tabletop”, tabletop)//表前缀
root.put(“nowDate”, new Date())//当前日期
DelAllFile.delFolder(PathUtil.getClasspath()+”admin/ftl”)//生成代码前,先清空之前生成的代码
/* ============================================================================================= */
String filePath = “admin/ftl/code/”//存放路径
String ftlPath = “createCode”//ftl路径
/*生成controller*/
Freemarker.printFile(“controllerTemplate.ftl”, root, “controller/”+packageName+”/”+objectName.toLowerCase()+”/”+objectName+”Controller.java”, filePath, ftlPath)
/*生成service*/
Freemarker.printFile(“serviceTemplate.ftl”, root, “service/”+packageName+”/”+objectName.toLowerCase()+”/”+objectName+”Service.java”, filePath, ftlPath)
/*生成mybatis xml*/
Freemarker.printFile(“mapperMysqlTemplate.ftl”, root, “mybatis_mysql/”+packageName+”/”+objectName+”Mapper.xml”, filePath, ftlPath)
Freemarker.printFile(“mapperOracleTemplate.ftl”, root, “mybatis_oracle/”+packageName+”/”+objectName+”Mapper.xml”, filePath, ftlPath)
/*生成SQL脚本*/
Freemarker.printFile(“mysql_SQL_Template.ftl”, root, “mysql数据库脚本/”+tabletop+objectName.toUpperCase()+”.sql”, filePath, ftlPath)
Freemarker.printFile(“oracle_SQL_Template.ftl”, root, “oracle数据库脚本/”+tabletop+objectName.toUpperCase()+”.sql”, filePath, ftlPath)
/*生成jsp页面*/
Freemarker.printFile(“jsp_list_Template.ftl”, root, “jsp/”+packageName+”/”+objectName.toLowerCase()+”/”+objectName.toLowerCase()+”_list.jsp”, filePath, ftlPath)
Freemarker.printFile(“jsp_edit_Template.ftl”, root, “jsp/”+packageName+”/”+objectName.toLowerCase()+”/”+objectName.toLowerCase()+”_edit.jsp”, filePath, ftlPath)
/*生成说明文档*/
Freemarker.printFile(“docTemplate.ftl”, root, “说明.doc”, filePath, ftlPath)
//this.print(“oracle_SQL_Template.ftl”, root)控制台打印
/*生成的全部代码压缩成zip文件*/
FileZip.zip(PathUtil.getClasspath()+”admin/ftl/code”, PathUtil.getClasspath()+”admin/ftl/code.zip”)
/*下载代码*/
FileDownload.fileDownload(response, PathUtil.getClasspath()+”admin/ftl/code.zip”, “code.zip”)
}
}
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)