`
lynnlysh
  • 浏览: 178891 次
  • 性别: Icon_minigender_2
  • 来自: 天津
社区版块
存档分类
最新评论

反射机制在动态生成类并访问该类数据中的应用

阅读更多
前提:
本文将介绍在动态加载不确定类的方法,并且自由访问不确定的类的数据
高级:
当你获得到某个类的对象们时,对象的属性值为类对象的只能获得ID而不能获取到其他值,
这时获得的属性对象是个代理类的对象,如要获取真正的属性对象,我们要通过hibernate执行查询语句。
开始啦:
根据String型的名称,动态生成类:
/**
     * @return 返回导出对象对应的类
     * @throws Exception
     *             抛出异常
     */
    public Object get(String className) throws Exception {
        Class<?> clz = Class.forName(className);
        Object obj = clz.newInstance();
        return obj;
    }

获取动态生成的类的对象:
/**
     * @param obj  要转换的对象 这个对象此时是代理类
     * @param session hibernate的session
     *
     */
public Object ObjectByClassName(Object obj,Session session){
    obj = (Object)((SessionImpl)session).immediateLoad(fieldName,session.getIdentifier(obj));
    //通过session查询语句,得到一个完整的对象
    return obj;
}

访问动态生成的类的属性:
   /**
     * 
     * @param obj 动态获取的对象
     * @param fieldName 该对象的类  
     *            
     * @return 导出对象中分类条件字段值
     */
    private Object getProperty(Object obj,String fieldName) {
        Object value = null;
        Field property;
		try {
			Class<?> conClass = obj.getClass();
			property = conClass.getDeclaredField(fieldName);
			property.setAccessible(true);  //如果要访问的属性是私有的,那么此句很必要,你懂的!
			try {
				value=property.get(obj);
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			}
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (NoSuchFieldException  e) {
			e.printStackTrace();
		}catch(ClassNotFoundException e){
			e.printStackTrace();
		}
        return value;
    }

根据属性名获得某类对象的属性:
此处的特点为要获取的属性名可能是这个类的基类中的私有属性
/**
    * @obj 对象 
    * @fieldName 属性名称
    * @return 返回分类字段值的name属性的Field
    * @throws Exception
    */
   public Object getFieldObject(Object obj,String fieldName){
		Class<?> conClass = obj.getClass();
		try {
			Field[] conField = conClass.getDeclaredFields();
			int row = 10;//防止找不到此名称的属性造成无限循环
			while(row>0){
				for(int i=0;i<conField.length;i++){
		      			Field field = conField[i];
		      			field.setAccessible(true);
		      			if(field.getName().equals(fieldName)){
		      				try {
								return field.get(obj);
							} catch (IllegalArgumentException e) {
								return "";
							} catch (IllegalAccessException e) {
								return "";
							}
			      		}
	      			}
				conClass =conClass.getSuperclass();
				conField = conClass.getDeclaredFields();
				row--;
			}
	   } catch (ClassNotFoundException e) {
		   System.out.println(e.getMessage());
		   
		   return "";
		}
		return "";
   }
}

获得未知类的set型属性值(即泛型)对应的具体类名:
//property是已获得的一个泛型的属性值	
	if (property.getClass().getName().endsWith(this.SET_TYPE)) {
                        PersistentSet sets = (PersistentSet)property;
                        Iterator<?> itSet = sets.iterator();
                        while(itSet.hasNext()){
                        	Object it = itSet.next();//在这里hibernate执行了查询语句,得到了一个完整的对象
				String setClassName = it.getClass();
			}
	}

***************************世界末日前也得格叽格叽*********************************
对事业:勿忘初衷
对XXX:有些人,一旦遇见,便一眼万年;有些心动,一旦开始,便覆水难收。
0
0
分享到:
评论
1 楼 xjt_job 2012-12-11  
[img][/img]
   

相关推荐

    Java反射机制在数据持久层轻量级ORM框架中的应用研究.pdf

    在Java程序设计语言中,反射机制(Reflection)是一个非常重要的特性,它允许程序在运行时动态地访问和修改类的行为。这个特性在很多方面都有广泛的应用,尤其是在数据持久层(Persistence Layer)的轻量级对象关系...

    JAVA反射机制与动态代理

    总结,Java反射机制是Java平台提供的一种强大的元数据访问能力,而动态代理则是在反射基础上实现的一种高级应用,两者结合使得Java代码更加灵活和可扩展。在实际开发中,理解并熟练运用反射和动态代理,能够帮助我们...

    JAVA类的反射机制

    Java类的反射机制是Java编程语言中的一个强大特性,它允许程序在运行时动态地获取类的信息,并且能够对类的对象进行操作。反射机制的核心在于`java.lang.Class`类和`java.lang.reflect`包中的相关类,如`Constructor...

    Java 的反射机制

    在Java中,每个类都与一个Class对象相对应,反射机制就是通过Class对象来实现对类的动态访问。 1. **运行时类信息获取**: Java反射机制使得我们可以在程序运行时获取到类的所有属性和方法。例如,`Class&lt;?&gt; clazz...

    java动态代理反射机制

    Java动态代理和反射机制是Java开发中的重要概念,它们在构建灵活、可扩展的系统时发挥着关键作用。本文将详细讲解这两个主题,并结合给定的UDP编程代码,阐述它们在实际应用中的体现。 首先,让我们理解Java动态...

    JAVA反射机制与动态代理续一.rar

    Java反射机制是Java语言的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,甚至可以创建和操作类的对象。动态代理是利用反射机制实现的一种编程技术,它能够在运行时动态创建代理对象来对原对象进行...

    cglib动态生成java类

    当目标类没有实现任何接口时,CGLib会生成一个该目标类的子类,并在子类中对方法进行拦截处理。如果目标类实现了接口,CGLib会优先选择使用接口代理。CGLib的核心是ASM库,它能直接操作字节码,从而实现对类的动态...

    JAVA的反射机制与动态代理.pdf

    通过反射机制,开发人员可以在程序运行期间动态地获取类的信息,例如类的方法、字段、构造函数等,并能够创建对象、调用方法或设置字段值。 #### 二、Class对象 在JAVA中,`Class`对象是执行RTTI的核心。每个类都...

    基于Java动态代理和反射机制实现ORM

    在Java中,基于动态代理和反射机制实现ORM可以提高代码的可维护性和灵活性。本篇文章将深入探讨如何在Java环境下,结合MySQL数据库,利用动态代理和反射技术来实现简单的ORM框架。 首先,我们需要了解动态代理和...

    详细讲解反射机制

    3. **生成动态代理**:这是反射机制的一个高级应用,允许我们创建一个接口的代理实例,用于拦截并处理对该接口方法的调用,常用于AOP(面向切面编程)和RPC(远程过程调用)等场景。 #### Java Reflection API简介 ...

    基于反射机制的数据流Java多态性实现及研究.pdf

    数据流Java是一种并行程序设计模型,它也具有面向对象程序多态的概念,反射机制允许程序运行时动态地加载一个类,生成该对象的实例和调用该实例的方法。 数据流Java程序设计模型可以分为两种:传统数据流模型和数据...

    Java语言的反射机制

    1. **动态获取类信息**:可以在运行时判断任意一个对象所属的类,包括该类的所有属性和方法。 2. **动态创建对象**:在运行时可以构造任意一个类的对象,这通常用于框架设计和插件式架构。 3. **访问和修改私有属性...

    反射机制的文档

    ### 反射机制的核心概念与应用 #### 概述 反射机制是Java语言的一个核心特性,它赋予了Java程序在运行时动态获取类信息的能力。通过反射,可以在不知道具体类名的情况下,操作类的属性、构造函数和方法,极大地...

    CreateClass_net c#动态创建程序集、类、属性、方法等

    在.NET框架中,C#语言提供了强大的元数据和反射机制,允许我们在运行时动态地创建、操作和执行程序集、类、属性以及方法。`CreateClass_net`项目就是利用这些特性来实现动态编程的一个示例。这篇内容将深入探讨如何...

    java 反射机制知识点

    Java的反射机制是Java编程语言的核心特性之一,它允许程序在运行时动态地获取类的信息并操作类的对象。反射机制提供了对Java类的自我检查能力,使得开发者可以在不知道类的具体名称的情况下,创建和操作类的对象。 ...

    JAVA基础JAVA中的反射机制详解.pdf

    Java反射机制是Java语言提供的一种强大的工具,它允许程序在运行时动态地获取类的信息(如类名、属性、方法等)并进行操作。反射机制是基于Java的动态类型特性的,它使得Java具备了“元编程”的能力,即在运行时分析...

    JAVA中的反射机制共6页.pdf.zip

    9. **应用场景**: 反射机制广泛应用于配置文件驱动的程序(如Spring框架)、插件系统、单元测试(如JUnit)、数据绑定(如Gson、Jackson)以及动态代理等场景。 10. **Java动态代理**: Java的`java.lang.reflect....

    java反射机制原理1

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、对象等的内部信息。这一机制的核心在于`java.lang.reflect`包中的类和接口,如Class、Constructor、Method和Field。通过反射,...

    Java反射机制.工作原理

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查并操作类、接口、字段和方法的信息,从而实现动态类型的功能。通过反射,我们可以在代码执行期间动态地创建对象、调用方法、访问和修改字段,这...

Global site tag (gtag.js) - Google Analytics