前提:
本文将介绍在动态加载不确定类的方法,并且自由访问不确定的类的数据
高级:
当你获得到某个类的对象们时,对象的属性值为类对象的只能获得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:有些人,一旦遇见,便一眼万年;有些心动,一旦开始,便覆水难收。
分享到:
相关推荐
在Java程序设计语言中,反射机制(Reflection)是一个非常重要的特性,它允许程序在运行时动态地访问和修改类的行为。这个特性在很多方面都有广泛的应用,尤其是在数据持久层(Persistence Layer)的轻量级对象关系...
总结,Java反射机制是Java平台提供的一种强大的元数据访问能力,而动态代理则是在反射基础上实现的一种高级应用,两者结合使得Java代码更加灵活和可扩展。在实际开发中,理解并熟练运用反射和动态代理,能够帮助我们...
Java类的反射机制是Java编程语言中的一个强大特性,它允许程序在运行时动态地获取类的信息,并且能够对类的对象进行操作。反射机制的核心在于`java.lang.Class`类和`java.lang.reflect`包中的相关类,如`Constructor...
在Java中,每个类都与一个Class对象相对应,反射机制就是通过Class对象来实现对类的动态访问。 1. **运行时类信息获取**: Java反射机制使得我们可以在程序运行时获取到类的所有属性和方法。例如,`Class<?> clazz...
Java动态代理和反射机制是Java开发中的重要概念,它们在构建灵活、可扩展的系统时发挥着关键作用。本文将详细讲解这两个主题,并结合给定的UDP编程代码,阐述它们在实际应用中的体现。 首先,让我们理解Java动态...
Java反射机制是Java语言的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,甚至可以创建和操作类的对象。动态代理是利用反射机制实现的一种编程技术,它能够在运行时动态创建代理对象来对原对象进行...
当目标类没有实现任何接口时,CGLib会生成一个该目标类的子类,并在子类中对方法进行拦截处理。如果目标类实现了接口,CGLib会优先选择使用接口代理。CGLib的核心是ASM库,它能直接操作字节码,从而实现对类的动态...
通过反射机制,开发人员可以在程序运行期间动态地获取类的信息,例如类的方法、字段、构造函数等,并能够创建对象、调用方法或设置字段值。 #### 二、Class对象 在JAVA中,`Class`对象是执行RTTI的核心。每个类都...
在Java中,基于动态代理和反射机制实现ORM可以提高代码的可维护性和灵活性。本篇文章将深入探讨如何在Java环境下,结合MySQL数据库,利用动态代理和反射技术来实现简单的ORM框架。 首先,我们需要了解动态代理和...
3. **生成动态代理**:这是反射机制的一个高级应用,允许我们创建一个接口的代理实例,用于拦截并处理对该接口方法的调用,常用于AOP(面向切面编程)和RPC(远程过程调用)等场景。 #### Java Reflection API简介 ...
数据流Java是一种并行程序设计模型,它也具有面向对象程序多态的概念,反射机制允许程序运行时动态地加载一个类,生成该对象的实例和调用该实例的方法。 数据流Java程序设计模型可以分为两种:传统数据流模型和数据...
1. **动态获取类信息**:可以在运行时判断任意一个对象所属的类,包括该类的所有属性和方法。 2. **动态创建对象**:在运行时可以构造任意一个类的对象,这通常用于框架设计和插件式架构。 3. **访问和修改私有属性...
### 反射机制的核心概念与应用 #### 概述 反射机制是Java语言的一个核心特性,它赋予了Java程序在运行时动态获取类信息的能力。通过反射,可以在不知道具体类名的情况下,操作类的属性、构造函数和方法,极大地...
在.NET框架中,C#语言提供了强大的元数据和反射机制,允许我们在运行时动态地创建、操作和执行程序集、类、属性以及方法。`CreateClass_net`项目就是利用这些特性来实现动态编程的一个示例。这篇内容将深入探讨如何...
Java的反射机制是Java编程语言的核心特性之一,它允许程序在运行时动态地获取类的信息并操作类的对象。反射机制提供了对Java类的自我检查能力,使得开发者可以在不知道类的具体名称的情况下,创建和操作类的对象。 ...
Java反射机制是Java语言提供的一种强大的工具,它允许程序在运行时动态地获取类的信息(如类名、属性、方法等)并进行操作。反射机制是基于Java的动态类型特性的,它使得Java具备了“元编程”的能力,即在运行时分析...
9. **应用场景**: 反射机制广泛应用于配置文件驱动的程序(如Spring框架)、插件系统、单元测试(如JUnit)、数据绑定(如Gson、Jackson)以及动态代理等场景。 10. **Java动态代理**: Java的`java.lang.reflect....
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、对象等的内部信息。这一机制的核心在于`java.lang.reflect`包中的类和接口,如Class、Constructor、Method和Field。通过反射,...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查并操作类、接口、字段和方法的信息,从而实现动态类型的功能。通过反射,我们可以在代码执行期间动态地创建对象、调用方法、访问和修改字段,这...