JAVA代码生成如何实现 Java代码生成工具

如何使用Freemarker生成java代码

Freemarker是一个模板框架。我们可以通过Freemarker进行代码生成或页面的静态生成。 现在简单的说一下怎样使用Freemarker Freemarker的主要生成类

专注于为中小企业提供成都做网站、成都网站设计服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业睢阳免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了成百上千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

public boolean generate(String templateFileName, Map data,

String fileName) {

try {

//取得模板的位置

String templateFileDir=templateFileName.substring(0, templateFileName.lastIndexOf("/"));

//取得模板的名字

String templateFile=templateFileName.substring(templateFileName.lastIndexOf("/"), templateFileName.length());

//取得生成文件的路径

String genFileDir=fileName.substring(0, fileName.lastIndexOf("/"));

Template template = ConfigurationHelper.getConfiguration(templateFileDir).getTemplate(templateFile);

File fileDir=new File(genFileDir);

org.apache.commons.io.FileUtils.forceMkdir(fileDir);

File output = new File(fileName);

if(output.exists()){

//如何代码已存在不重复生成

return false;

}

Writer writer = new FileWriter(output);

template.process(data, writer);

writer.close();

} catch (TemplateException e) {

e.printStackTrace();

return false;

} catch (IOException e) {

e.printStackTrace();

return false;

}

return true;

}

代码中的Map 是模板所需要的数据,我们可以通过面向对像的方法把数据存在模板中public boolean genDaoInterface(String fileName){

DaoModel daoModel=new DaoModel();

//设置Dao实现类的包名

daoModel.setPackageName(DaoConstant.PACKAGE);

//取得接口名

String className=StringUtils.substringBefore(fileName,".");

//设置接口名

daoModel.setClassName(className);

MapString, Object data = new HashMapString, Object();

data.put("model", daoModel);

//设置生成的位置

String filePath=new String("src/"+package2path(DaoConstant.PACKAGE)+"/"+fileName);

//代码生成

return super.generate(DaoConstant.INTERFACE_TEMPLATE, data, filePath);

}

data.put("model", daoModel);由这句代码可看出我们将可以在模板中直接调用这些数据package ${model.packageName};

public interface ${model.className} extends BaseHibernateDao {

}

Java进阶之 怎么自动生成代码

myeclipse没有直接的快捷键自动生成构造方法,可以有快捷键弹出source,接着点击自动生成构造方法的菜单。

具体操作如下:工具里快捷键alt+shift+s

就弹出来Generate

Constructor

using

Fields

用java如何用代码实现动态生成JLabel

String[] str={"名字1","名字2","名字3"};

for(int i=0;iv.length;i++){

JLabel lbl = new JLabel(str[i]);

int x=i%4*80+40; //4个一排 间隔80 第一个x从40开始

int y=i/4*40+40;

lbl[i].setBounds(x, y, 80, 20);

panel.add(chb[i]);

}

Java动态生成代码

可以的,我说说大概思路,很简单,你自己具体实现吧,把代码写给你没意义的:

1.将你这段字符串输出到一个文件里,用Java类文件的方式命名。

2.调用外部javac命令将该文件编译。

3.用类加载器(ClassLoad)动态加载新的class文件并用Class.forName()注册该类,然后就可以正常使用了。

上面的每一步都能在baidu中找到实现方法,自己发挥吧。

怎么用java代码来生成一个类,比如说我现在有一个接口IA,怎么用代码来生成一个文件A.java,类A实现这个IA

正则表达式分析文件就可以了……

再加个状态机就好…

当然在处理代码字符串之前,先要把所有的注释部分删除掉,包括//和/* */部分

import java.util.regex.*;

public class InterfaceAnalyzer {

public static void main(String[] args) {

interface_context =

"package com.app.test;\n"

+"public interface IA {\n"

+" public abstract void a();\n"

+" public abstract void b();\n"

+"}";

interface_name = "";

class_name = "A";

class_implement = "public class "+class_name+" implements ";

pattern = Pattern.compile("[\\w_\\.]+");

match = pattern.matcher(interface_context);

while(match.find()) {

stateMachine(match.group());

}

class_implement += ") {\n\t}\n}";

System.out.println(class_implement);

}

public static void stateMachine(String word) {

switch(status) {

case 0:

if("package".equals(word)) {

status = 1;

} else if("interface".equals(word)) {

status = 2;

}

break;

case 1: // get package name

package_name = word;

class_implement += package_name+".";

status = 0;

break;

case 2: // get interface name

interface_name = word;

class_implement += interface_name + "{\n";

status = 3;

break;

case 3: // start a member

if("public".equals(word) || "private".equals(word) || "protected".equals(word)) {

member_access_type = word;

status = 4;

}

break;

case 4: // get a method that needs to override

if("abstract".equals(word)) {

status = 5;

class_implement += "\t" + member_access_type + " ";

} else {

status = 3; // not a method member

}

break;

case 5: // get member type

member_type = word;

class_implement += member_type + " ";

status = 6;

break;

case 6: // get member name

member_name = word;

class_implement += member_name + "(";

status = 7;

break;

case 7: // get parameter type

if("public".equals(word) || "private".equals(word) || "protected".equals(word)) {

member_access_type = word;

class_implement += ") {\n\t}\n";

status = 4;

} else {

para_type = word;

class_implement += ", " + para_type + " ";

status = 8;

}

break;

case 8: // get parameter name

para_name = word;

class_implement += para_name;

status = 8;

break;

}

}

private static int status;

private static String interface_context;

private static String package_name;

private static String interface_name;

private static String class_name;

private static String class_implement;

private static String member_name;

private static String member_type;

private static String member_access_type;

private static String para_name;

private static String para_type;

private static Pattern pattern;

private static Matcher match;

}

java代码生成器能生成c语言代码吗?用什么方法能实现呢?

按照我的理解,可以的,代码生成器是跨平台,而且是跨语言的(至少是跨文本语言的,UML暂时不好说,)。

代码生成器作为一种开发工具,一般不直接作为程序的一部分,通常也不直接或间接(如通过AOP)被程序调用,他是通过编程的方式生成所需要的代码,然后将生成的代码作为源文件,复制到开发工具的代码区,然后进行编译。由于代码生成器是在编译之前运行的,因此它可以跨语言,你不但可以用代码生成器生成高级语言,也可以生成汇编语言,甚至机器码(0、1代码)。

但编写代码生成器是一个难点,它需要你了解目标编程语言的语法。如果别人已经把你需要的代码生成器写好了,你只需按要求使用即可,此时就不需要了解目标编程语言的语法。

JNI是通过Java调用C语言(或其他语言,一般是C),它的实现机制与代码生成器不同(JNI是通过代码调用实现功能,而代码生成器是生成代码,复制代码进行使用),由于C是底层语言,一些底层操作单靠Java无法实现,所以才需要JNI。

以上是我对代码生成器的个人理解,虽然提问时间已过了很久,但依然希望能对你及其他网友有所帮助。


文章标题:JAVA代码生成如何实现 Java代码生成工具
文章转载:http://ybzwz.com/article/dodgced.html