`
numen06
  • 浏览: 76027 次
  • 性别: 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处理类随机生成验证码

    在Java编程中,生成验证码是一项常见的任务,常用于防止机器人或恶意用户自动操作,例如注册、登录等场景。验证码(CAPTCHA)全称是“Completely Automated Public Turing test to tell Computers and Humans Apart...

    Java IO 与 装饰模式

    例如,当选择对一个输入流进行装饰时,IDE会自动提示可用的装饰器类,并自动生成相应的代码。 总的来说,Java IO利用装饰模式构建了一个灵活且易于扩展的流处理框架,允许我们在运行时动态地增加流的功能,而无需...

    代码生成器代码生成器代码生成器代码生成器代码生成器

    1. 数据访问层(DAL)生成:可以自动生成与数据库交互的代码,如ORM框架的实体类、SQL语句等。 2. 用户界面(UI)生成:根据模型数据生成前端页面模板,减少前端开发工作量。 3. 服务接口(API)生成:根据接口定义...

    java源码生成-Jource:用于生成Java源代码的库

    这个库尤其适用于那些需要大量自动生成代码的场景,如ORM框架、代码生成器或元编程应用。 在Java编程中,源码生成通常涉及到以下几个关键知识点: 1. **模板引擎**:Jource可能采用了模板引擎技术,允许开发者定义...

    吉林大学软件设计模式大富翁游戏(JAVA实现)

    1. **源代码文件**(.java) - 包含游戏逻辑、玩家、棋盘、骰子、卡片等类的实现。 2. **资源文件** - 可能包含图片、音频、配置文件等,用于增强游戏体验。 3. **编译后的类文件**(.class) - Java编译器将源代码...

    python转java

    需要注意的是,自动转换工具并不能完全替代人工工作,特别是在处理复杂逻辑、自定义类、面向对象编程以及 Python 的高级特性(如装饰器、元类等)时。因此,对于大型项目或复杂的 Python 代码,手动迁移可能是更好的...

    JAVA中的数据字典

    Javadoc工具可以自动生成类、接口和方法的文档,帮助其他开发者理解数据的意义和用途。 5. **序列化**:Java序列化机制允许将对象的状态转换为字节流,便于存储或在网络上传输。这对于持久化数据字典或者在分布式...

    浅析Java验证码生成库JCaptcha

    Java验证码生成库JCaptcha是一个广泛使用的开源库,用于在Java应用程序中创建安全的、难以破解的验证码。验证码(CAPTCHA)的主要目的是防止自动化程序(如机器人或爬虫)进行恶意操作,例如注册虚假账户或进行大量...

    JAVA解惑.pdf

    它们可以用于编译时检查、运行时处理或自动生成代码等场景。 以上是《JAVA解惑》一书中可能涉及的部分知识点,每一点都值得深入学习和实践。通过掌握这些内容,开发者可以更好地解决Java编程中的各种问题,提升编程...

    java 设计模式 demo

    Java中,Builder模式通常包含一个Director类来指导构造过程,以及一个具体的Builder类来生成产品。 5. 原型模式(Prototype):用原型实例指定创建对象的种类,并且通过复制这个原型来创建新的对象。在Java中,可以...

    计算机和JAVA 面试题大全

    - 讨论注解的用途,如代码自动生成、元数据提供等。 11. **集合框架高级话题** - 学习泛型的使用,理解类型擦除的概念。 - 面试题:解释什么是并发容器,比如ConcurrentHashMap? 12. **Java 8及新特性** - ...

    java写的一个流星雨小程序【全屏版】

    描述中提到的"自动获取屏幕大小"是通过Java的`GraphicsDevice`类来实现的,它允许程序获取用户的显示器尺寸,然后根据这些信息调整JFrame的大小。"去除边框"和"最大化最小化关闭按钮"是通过设置JFrame的属性完成的,...

    java程序员之路

    6. **多线程**:Java提供了丰富的多线程支持,包括Thread类、Runnable接口以及并发工具类如synchronized关键字、Lock接口、Semaphore等,用于实现并发编程。 7. **网络编程**:学习Socket编程,理解TCP/IP协议,...

    java毕业设计

    7. **Maven或Gradle**:这些是构建工具,帮助管理和构建Java项目,自动化依赖管理、编译、打包和部署过程。 8. **版本控制**:如Git,用于团队协作和代码版本管理。 9. **设计模式**:如单例、工厂、装饰器等,...

    (超赞)JAVA精华之--深入JAVA API

    - `java.util.Random` 用于生成伪随机数,可用于生成随机数或随机选择。 - **向量类 Vector** - `java.util.Vector` 是线程安全的动态数组,可以自动调整大小,适用于多线程环境。 - **栈类 Stack** - `java....

    JAVA高级编程ppt

    8. **注解(Annotations)**:注解是元数据的一种形式,可以用于向编译器、JVM或其他工具提供有关代码的信息,如用于验证、自动生成代码、部署配置等。 9. **模块系统(Module System)**:Java 9 引入了模块系统,...

    Java经典代码(绝对值得收藏)

    7. **反射与注解**:反射机制允许在运行时动态获取类的信息并操作对象,注解提供了一种元数据的方式,可以用于配置、验证或自动生成代码。经典代码可能会使用反射来实现动态代理,或者用注解进行代码的自我描述。 8...

    GoF设计模式Java版

    在Java中,装饰器模式通常用于在不改变原有类的情况下,为其添加新的功能。 ### 结论 GoF设计模式为解决软件设计中的常见问题提供了宝贵的指导思想。通过合理运用这些设计模式,可以显著提升软件系统的灵活性、可...

    java与模式

    - 装饰器模式(Decorator Pattern):动态地给一个对象添加一些额外的职责,就增加功能来说,装饰器模式比生成子类更为灵活。 4. Java学习资源 该部分内容提到了一个Java学习群,这可能是一个提供学习支持和资源...

Global site tag (gtag.js) - Google Analytics