java bean生成_JAVABEAN自动生成器

本文介绍了如何使用自定义的Java类`AutoBean`来简化JAVABEAN的创建过程。通过解析已有的Java文件,提取属性信息并生成对应的GET和SET方法,大大提高了开发效率。该工具目前仅处理简单的Java文件,未来计划增加更多的功能和灵活性。
摘要由CSDN通过智能技术生成

最近我在学习JSP,可是在每次写JAVABEAN的时候,都发现好麻烦,要去写一大堆的GET和SET方法,听说ECLIPSE里面有自动生成的功能,我何不自己写一个。

首选我定义了一个Attribute类,用来存放属性信息(类型和名字)以及为它们生成GET/SET方法。

package Utils.AutoBean;

import java.util.*;

class Attribute

{

private String type;    //属性的类型

private String name;    //属性的名字

private StringBuffer get = new StringBuffer();  //为属性生成的GET方法

private StringBuffer set = new StringBuffer();  //为属性生成的SET方法

private int getCount = 0;       //标记变量,保证只生成一次

private int setCount = 0;

/**

*生成属性的set方法

*/

private void generateSet()

{

if (setCount > 0)

{

return;

}

setCount++;

set.append("\tpublic void set");

//将属性名第一个字母置为大写

set.append(name.substring(0, 1).toUpperCase() + name.substring(1, name.length()));

set.append("(" + type + " " + name + ")\n\t{\n");

set.append("\t\tthis." + name + " = " + name + ";\n");

set.append("\t}\n\n");

}

/**

*生成属性的get方法

*/

private void generateGet()

{

if (getCount > 0)

{

return;

}

getCount++;

get.append("\tpublic " + type + " get");

//将属性名第一个字母置为大写

get.append(name.substring(0, 1).toUpperCase() + name.substring(1, name.length()));

get.append("()\n\t{\n");

get.append("\t\treturn " + name + ";\n");

get.append("\t}\n\n");

}

/**

*生成属性的set和get方法

*/

private void generateBean()

{

//生成 set 方法

generateSet();

//生成 get 方法

generateGet();

}

/**

*获取属性的GET 和 SET 方法

*/

public StringBuffer getBean()

{

generateBean();

StringBuffer sb = new StringBuffer();

sb.append(set);

sb.append(get);

return sb;

}

/**

*获取属性的get方法

*/

public StringBuffer getGet()

{

generateGet();

return get;

}

/**

*获取属性的set方法

*/

public StringBuffer getSet()

{

generateSet();

return set;

}

/**

*构造函数,传入参数为属性的类型和名字

*@param type 属性的类型

*@param name 属性的名字

*/

public Attribute(String type, String name)

{

this.type = type;

this.name = name;

}

public void setType(String type)

{

this.type = type;

}

public void setName(String name)

{

this.name = name;

}

public String getType()

{

return type;

}

public String getName()

{

return name;

}

};

下面就是自动生成JAVABEAN的类AutoBean

package Utils.AutoBean;

import java.util.*;

import java.io.*;

public class AutoBean

{

private Stack attr = new Stack();     //属性对象栈

private ArrayList strList = new ArrayList();  //属性行容器

private BufferedReader in = null;

private PrintWriter out = null;

private StringBuffer text = new StringBuffer();  //最终文本

/**

*构造函数

*@param path 要生成JAVABEAN的JAVA文件路径

*/

public AutoBean(String path)

{

String s = "";

try

{

in = new BufferedReader(new FileReader(path));

while ((s = in.readLine()) != null)

{

//将类的属性声明保存在text中

text.append(s + "\n");

//将每一行入队列

strList.add(s);

}

in.close();

//去除类定义从最后一个"}"开始的字符串

int lst = text.lastIndexOf("}");

if (lst == -1)

{

System.out.println("Error : Not a correct java file!");

System.exit(1);

}

text = new StringBuffer(text.substring(0, lst));

text.append("\n");

out = new PrintWriter(new BufferedWriter(new FileWriter(path)));

}

catch (IOException e)

{

e.printStackTrace();

}

}

/**

*将属性从每一行的文本中分割出来,并构造属性对象后入栈

*/

private void cutAttr()

{

int index = 0;

String s = "";

for (int i = 0 ;i < strList.size() ;i++ )

{

s = (String)strList.get(i);

//先去掉头尾的空格

s = s.trim();

if (s == "")

{//去除空行

continue;

}

if (s.startsWith("package") || s.startsWith("import") || (s.indexOf("class") != -1 && s.indexOf(";") == -1)

|| s.startsWith("/*") || s.startsWith("*/") || s.startsWith("//")

|| s.startsWith("{") || s.startsWith("}"))

{//去除注释、包、类定义等

continue;

}

if (s.indexOf(";") == -1)

{//去除非分号结尾的行

continue;

}

//找到最后一个空格,则从它开始至结尾前一个为属性名

int last = s.lastIndexOf(" ");

String name = s.substring(last + 1, s.length() - 1);

//倒数第一与倒数第二空格之前是属性类型

int backTwo = s.lastIndexOf(" ",last - 1);

String type = s.substring(backTwo + 1, last);

//将每个属性对象入栈

attr.push(new Attribute(type, name));

}

}

/**

*生成JAVA文件的JAVABEAN形式的字符串,并将源文件改变

*/

public void generateBean()

{

cutAttr();

Attribute tmp;

while (!attr.empty())

{

tmp = (Attribute)attr.pop();

text.append(tmp.getBean());

}

//将"}"加入到末尾

text.append("}\n");

writeBack();

}

/**

*写回到文件

*/

private void writeBack()

{

out.print(text.toString());

out.close();

}

}

这里面我只考虑了一个没有写任何属性的BEAN的一个简单JAVA文件,并且要求代码的格式要基本上标准的。

下面的代码是用来测试AutoBean的,测试结果完全正常。

当然,我并没有考虑太多的特殊情况,因为暂时来讲只是我自己偷懒用的,所以测试也不完全。因为只要我的输入格式正确了,它就能很好的工作。

如果有时间的话,我会把它改进,让它能接收更一般的格式,考虑更多的情况,能够定制对哪些属性分别生成只哪些方法等等。或者再给它加上一个界面,做成一个小应用程序发到网上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值