`
TechBirds
  • 浏览: 82583 次
文章分类
社区版块
存档分类
最新评论

利用Freemarker自动生成JavaBean文件

 
阅读更多

序:

特点:基本上能够满足简单JavaBean的生成,可以通过配置文件的更改,灵活自动生成对应的bean。

缺点:

1.这里只是作为一个简单的例子,在实际应用当中仍需要更改具体的代码,以应对不同名称,不同包名的类,总言之就是配置方面还不够灵活。

2.对于配置资源文件的对应参数,虽然很方便,但并没有对其参数进行严格的格式指定,即没有对应的正则表达式对其获取的参数进行校验。因此使用时需较为注意。

正文:

下面直接切入正题:

前提是引入:freemark-xxxx.jar包

/*
  Modification Log:
 -----------------------------------------------------------------------------------
  Version		Notes        		By                Date
  -------   	--------------------------   ---------------------------------------
   1.0			Create       		Techbirds         2012-12-13
 -----------------------------------------------------------------------------------
  */
 package main.classinfo;
 /**
  * 封装属性信息
  *
  */
 public class Attribute {
 	private String name;
 	private String type;
 
 	public Attribute() {
 	}
 
 	public Attribute(String name, String type) {
 		this.name = name;
 		this.type = type;
 	}
 
 	public String getName() {
 		return name;
 	}
 
 	public void setName(String name) {
 		this.name = name;
 	}
 
 	public String getType() {
 		return type;
 	}
 
 	public void setType(String type) {
 		this.type = type;
 	}
 }
 
/*
  Modification Log:
 -----------------------------------------------------------------------------------
  Version		Notes        		By                Date
  -------   	--------------------------   ---------------------------------------
   1.0			Create       		Techbirds         2012-12-13
 -----------------------------------------------------------------------------------
  */
 package main.classinfo;
 /**
  * 封装类信息
  *
  */
 public class Class {
 	private String packagename;
 	private String classname;
 	private String[] imports;
 
 	public Class() {
 	}
 
 	public Class(String classname, String[] imports,String packagename) {
 		super();
 		this.classname = classname;
 		this.imports = imports;
 		this.packagename=packagename;
 	}
 
 	public String getClassname() {
 		return classname;
 	}
 
 	public void setClassname(String classname) {
 		this.classname = classname;
 	}
 
 	public String[] getImports() {
 		return imports;
 	}
 
 	public void setImports(String[] imports) {
 		this.imports = imports;
 	}
 
 	public String getPackagename() {
 		return packagename;
 	}
 
 	public void setPackagename(String packagename) {
 		this.packagename = packagename;
 	}
 }
 
public class BeanByCreateMain {
 	private final static String TEMPLATE_NAME="template.ftl";
 	private Configuration cfg;
 	private Properties ploader;
 	/**
 	 * 初始化工作
 	 */
 	public void init() throws Exception {
 		// 负责管理的实例创建+设置模板文件所在的目录
 		cfg = new Configuration();
 		// load资源的实例创建
 		ploader = new Properties();
 		cfg.setDirectoryForTemplateLoading(new File(
 				"E:\\Workspaces\\workspace\\javabean_complier\\bean_template"));
 		ploader.load(new FileInputStream(
 						"E:\\Workspaces\\workspace\\javabean_complier\\src\\bean.properties"));
 	}
 
 	
 	public void process() throws IOException, TemplateException {
 		
 		//1.load信息
 		Class clazz=loadClass();
 		List<Attribute> attributes=loadAttr();
 		//2.向root中放入模版中所需信息
 		Map<String, Object> root = new HashMap<String, Object>();
 		root.put("clazz",clazz);
 		root.put("attributes",attributes);
 		//3.将模版进行指定文件的输出
 		write(root);
 		
 	}
 	/*
 	 * 执行入口
 	 */
 	public static void main(String[] args) throws Exception {
 		BeanByCreateMain hfm = new BeanByCreateMain();
 		hfm.init();
 		hfm.process();
 	}
 	
 	/*
 	 * 加载类信息:包名,类名,import
 	 */
 	public Class loadClass() {
 		String packagename=ploader.getProperty("packagename");
 		String classname=ploader.getProperty("classname");
 		String values=ploader.getProperty("imports");
 		String[] imports=values.split(",");
 		Class clazz = new Class(classname, imports, packagename);
 		return clazz;
 	}
 	/*
 	 * 加载属性:属性名,属性类型
 	 */
 	public List<Attribute> loadAttr() {
 		List<Attribute> attributes = new ArrayList<Attribute>();
 		String values=ploader.getProperty("attribute");
 		String[] strs=values.split(",");
 		for (String s : strs) {
 			String[] sp=s.split(":");
 			attributes.add(new Attribute(sp[0],sp[1]));
 		}
 		return attributes;
 	}
 	/*
 	 * 将模版进行指定文件的输出
 	 */
 	public void write(Map<String, Object> root) throws IOException, TemplateException{
 		Template t = cfg.getTemplate(TEMPLATE_NAME);
 		OutputStream out = new FileOutputStream(
 				new File("E:\\Workspaces\\workspace\\javabean_complier\\src\\bean\\User.java"));
 		t.process(root, new OutputStreamWriter(out));
 	}
 	
 }
 

bean.properties资源文件

 packagename=bean
 classname=User
 imports=java.util.ArrayList,java.util.List
 attribute=name:String,age:int

template.ftl模版文件:

package ${clazz.packagename};
 
 <#list clazz.imports as being>
 import ${being};
 </#list>
 
 public class ${clazz.classname} {
 
 <#list attributes as being>
 	private ${being.type} ${being.name};
 	
 	public ${being.type} get${being.name?cap_first}() {
 		return ${being.name};
 	}
 	
 	public void set${being.name?cap_first}(${being.type} ${being.name}) {
 		this.${being.name} = ${being.name};
 	}
 </#list>
执行结果:

package bean;
 
 import java.util.ArrayList;
 import java.util.List;
 
 public class User {
 
 	private String name;
 	
 	public String getName() {
 		return name;
 	}
 	
 	public void setName(String name) {
 		this.name = name;
 	}
 	private int age;
 	
 	public int getAge() {
 		return age;
 	}
 	
 	public void setAge(int age) {
 		this.age = age;
 	}
 }
 


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics