`
numen06
  • 浏览: 75694 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

JAVA装饰类自动生成

阅读更多
package com.wesley.framework.decoration;

/**
 * @author it.zl 封装解析Object之后的一些参数
 */
public class DecoratorParam {
	private Class<?> cls;

	private StringBuffer clsString = new StringBuffer();

	public DecoratorParam(Class<?> cls) {
		super();
		this.cls = cls;
	}

	public DecoratorParam(Class<?> cls, StringBuffer clsString) {
		super();
		this.cls = cls;
		this.clsString = clsString;
	}

	public Class<?> getCls() {
		return cls;
	}

	public void setCls(Class<?> cls) {
		this.cls = cls;
	}

	public StringBuffer getClsString() {
		return clsString;
	}

	public void setClsString(StringBuffer clsString) {
		this.clsString = clsString;
	}

}

package com.wesley.framework.decoration;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

import com.meadville.entity.Tlog;

public class DecoratorUtil {
	private final static String PACKAGE = "com.XXX.entity.decoration";
	private final static String LINE = "\n";
	private final static String NULL = "\t";

	public static void main(String[] args) {
		DecoratorUtil.outputDecoratorBuffer(DecoratorUtil
				.getDecoratorBuffer(new Tlog()));
	}

	/**
	 * @param param
	 *            输出通过解析Object的信息
	 */
	public synchronized static void outputDecoratorBuffer(DecoratorParam param) {
		FileWriter fw = null;
		String packageDirName = System.getProperty("user.dir") + "/src/"
				+ PACKAGE.replace('.', '/');
		try {
			File file = new File(packageDirName + "\\"
					+ param.getCls().getSimpleName() + "Dec.java");
			file.createNewFile();
			fw = new FileWriter(file);
			fw.getEncoding().getBytes("utf-8");
			fw.write(param.getClsString().toString());
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				fw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * @param obj
	 * @return 通过Object来生成java,类似于反射
	 */
	public synchronized static DecoratorParam getDecoratorBuffer(Object obj) {
		Class<?> cls = obj.getClass();
		Field[] fields = cls.getDeclaredFields();
		StringBuffer sb = new StringBuffer();
		String modelName = cls.getSimpleName();
		String decName = cls.getSimpleName() + "Dec";
		sb.append("package ").append(PACKAGE).append(";").append(LINE);
		sb.append("import ").append(cls.getCanonicalName()).append(";")
				.append(LINE);
		sb.append("//http://numen06.iteye.com").append(LINE);
		sb.append("@SuppressWarnings(\"serial\")").append(LINE);
		sb.append("public class ").append(decName)
				.append(" extends DecoratorModel<").append(modelName)
				.append(",").append(decName).append("> {").append(LINE);
		sb.append(NULL).append("public ").append(decName)
				.append("() {super();}").append(LINE);
		sb.append(NULL).append("public ").append(decName).append("(")
				.append(modelName).append(" model) {super(model);}")
				.append(LINE);
		for (Field f : fields) {
			String getmethod = "get"
					+ f.getName().substring(0, 1).toUpperCase()
					+ f.getName().substring(1);
			String setmethod = "set"
					+ f.getName().substring(0, 1).toUpperCase()
					+ f.getName().substring(1);
			try {
				Method gmothod = cls.getMethod(getmethod, new Class<?>[0]);
				Method smothod = cls.getMethod(setmethod,
						gmothod.getReturnType());
				sb.append(NULL).append("public ")
						.append(gmothod.getReturnType().getName()).append(" ")
						.append(gmothod.getName()).append("() {").append(LINE);
				sb.append(NULL).append(NULL).append("return super.model.")
						.append(getmethod).append("();").append(LINE);
				sb.append(NULL).append("}").append(LINE);
				sb.append(NULL).append("public void").append(" ")
						.append(smothod.getName()).append("(")
						.append(smothod.getParameterTypes()[0].getName())
						.append(" ").append(f.getName()).append(") {")
						.append(LINE);
				sb.append(NULL).append(NULL).append("super.model.")
						.append(smothod.getName()).append("(")
						.append(f.getName()).append(");").append(LINE);
				sb.append(NULL).append("}").append(LINE);
			} catch (SecurityException e) {
				e.printStackTrace();
			} catch (NoSuchMethodException e) {
				e.printStackTrace();
			}
		}
		sb.append("}");
		// System.out.println(sb.toString());
		return new DecoratorParam(cls, sb);
	}
}
2
1
分享到:
评论

相关推荐

    java 面试题 总结

     GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收...

    java注解源码级框架-dekorate:用于生成Kubernetes相关清单的工具

    编译时生成器和装饰器的集合。 它使生成 Kubernetes 清单就像向类路径添加依赖项一样简单,并且像设置注释或应用程序属性一样简单地进行自定义。 不再浪费时间编辑 xml、json 和 yml,并在配置 Java 应用程序时...

    java面试800题

    Q0058 一个Java抽象类声明了一个方法并会抛出一个异常,问继承这个抽象类的子类,实现了这个方法,这个方法声明是不是一定要抛出一模一样的异常,可不可以不抛,或者抛出的异常比抽象类的异常范围大,或者小?...

    超级有影响力霸气的Java面试题大全文档

     GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收...

    Java23种设计模式

    5.Decrator,装饰模式:动态地给一个对象增加一些额外的职责,就增加的功能来说,Decorator模式相比生成子类更加灵活。 6.Bridge,桥模式:将抽象部分与它的实现部分相分离,使他们可以独立的变化。 7.Flyweight,享...

    GenPackage:Antlr v4项目生成器

    描述符模式:完整的描述符类集是从Antlr生成的文件中自动生成的。 描述符类是特定于项目语法定义的解析树上下文节点的类型。 描述符的默认实例使用装饰模式,允许简单地访问解析树上下文和相应的描述符。 转换器...

    java8源码-akangaroo:学习笔记,完善中

    生成器模式 原型模式 单例模式 结构型模式 适配器模式 桥接模式 组合模式 装饰器模式 代理模式 ...... 行为型模式 观察者模式 …… JVM JVM体系 类加载机制/过程 双亲委派机制/沙箱安全机制 JMM(Java内存模式) 字节...

    day020-继承加强和设计模式代码和笔记.rar

    它负责将 用户类路径(java -classpath或-Djava.class.path变量所指的目录, 即当前类所在路径及其引用的第三方类库的路径,如第四节中的问题6所述)下的类库 加载到内存中。 开发者可以直接使用系统...

    二十三种设计模式【PDF版】

    经常以那些技术只适合大型项目为由,避开或忽略它们,实际中,Java 的接口或抽象类是真正体现 Java 思想的核心所在,这些 你都将在 GoF 的设计模式里领略到它们变幻无穷的魔力。 GoF 的设计模式表面上好象也是一种...

    asp.net知识库

    自动代码生成器 关于能自定义格式的、支持多语言的、支持多数据库的代码生成器的想法 发布Oracle存储过程包c#代码生成工具(CodeRobot) New Folder XCodeFactory3.0完全攻略--序 XCodeFactory3.0完全攻略--基本...

    Python核心编程第二版

     11.3.6 *函数(与方法)装饰器   11.4 传递函数   11.5 Formal Arguments   11.5.1 位置参数   11.5.2 默认参数   11.6 可变长度的参数   11.6.1 非关键字可变长参数(元组)   11.6.2 ...

    Python核心编程第二版(ok)

     11.3.6 函数(与方法)装饰器   11.4 传递函数   11.5 FormalcArguments   11.5.1 位置参数   11.5.2 默认参数   11.6 可变长度的参数   11.6.1 非关键字可变长参数(元组)   11.6.2 ...

    Wicket 8.X开发文档(中文翻译+英文原版)

    用wicket隐藏装饰元素:enclosure标签 6.10。使用Border包围现有标记 6.11。摘要 7.组件生命周期 7.1。组件的生命周期阶段 7.2。组件生命周期的钩子方法 7.3。初始化阶段 7.4。渲染阶段 7.5。删除阶段 7.6。独立舞台...

    ZendFramework中文文档

    13.8. 自定义Feed和条目类 14. Zend_Filter 14.1. 简介 14.1.1. 什么是过滤器(filter)? 14.1.2. 过滤器的基本用法 14.1.3. 使用静态 get() 方法 14.2. 标准过滤器类 14.2.1. Alnum 14.2.2. Alpha 14.2.3. ...

Global site tag (gtag.js) - Google Analytics