package com.lj.reflectionTester;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Tester
{
//该方法实现对Customer对象的拷贝操作
public Object copy( Object obj) throws NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
Class<?> clz=obj.getClass();
// Constructor cons=clz.getConstructor(new Class[]{String.class, int.class});
// Object object=cons.newInstance(new Object[]{"hello",23});
Object objectCopy = clz.getConstructor(new Class[]{}).newInstance(new Object[]{});
//获得对象的所有成员变量
Field[] fields=clz.getDeclaredFields();
int i=0;
for(Field field:fields){
String name=field.getName();
String firstLetter=name.substring(0, 1).toUpperCase();
String getMethodName="get"+firstLetter+name.substring(1, name.length());
String setMethodName="set"+firstLetter+name.substring(1, name.length());
Method getMethod=clz.getMethod(getMethodName, new Class[]{});
Method setMethod=clz.getMethod(setMethodName, new Class[]{field.getType()});
Object value=getMethod.invoke(obj, new Object[]{});
setMethod.invoke(objectCopy, new Object[]{value});
System.out.println(value);
}
return objectCopy;
}
public static void main(String[] args) throws Exception
{
Tester tester=new Tester();
Customer c=(Customer) tester.copy(new Customer("li",25));
System.out.println(c.toString());
}
}
=====================Customer类===================
package com.lj.reflectionTester;
public class Customer
{
private Long id;
private String name;
private int age;
public Long getId()
{
return id;
}
public void setId(Long id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
public Customer(){
}
public Customer(String name, int age){
this.name=name;
this.age=age;
}
@Override
public String toString()
{
return "Customer [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
分享到:
相关推荐
本示例通过一个通用的DAO(Data Access Object)类,展示了如何在不依赖Hibernate等ORM框架的情况下,进行数据库的增删改查操作。这有助于理解底层的SQL执行过程,同时也提供了更灵活的控制权。 首先,DAO模式是一...
描述:本文章旨在深入探讨Java与Hibernate框架结合时所涉及的反射原理,通过解析Java反射机制的基础知识,理解Hibernate如何利用反射技术实现对象关系映射(ORM)。 ### Java反射原理概览 Java反射是Java语言的一...
《深入理解Hibernate原理:以反射技术为切入点》 Hibernate,作为一个强大的对象关系映射(ORM)框架,极大地简化了Java应用程序对数据库的操作。它通过将Java对象与数据库表进行映射,使得开发者可以以面向对象的...
Hibernate是一个流行的Java持久化框架,它的核心工作原理主要包括以下步骤: 1. **读取并解析配置文件**:Hibernate通过读取hibernate.cfg.xml或hibernate.properties文件来获取数据库连接信息和其他配置设置。 2....
2. 如果ActionForm对象不存在,就创建一个实例。 3. 调用ActionForm的validate方法进行表单验证。 4. 如果验证成功,调用匹配ActionMapping的Action类的execute方法。 5. Action执行完成后,根据返回值决定跳转的...
3. **创建SessionFactory**:基于解析的信息,Hibernate创建SessionFactory对象,它是线程安全的,整个应用程序通常只需要一个SessionFactory实例。 4. **打开Session**:SessionFactory创建Session对象,Session是...
Hibernate是一个开源的Java框架,它为对象关系映射(Object Relational Mapping, ORM)提供了一种实现方式,允许Java程序员以面向对象的方式操作数据库。从Hibernate的核心概念、工作原理到其实现细节,Hibernate...
1. 实体(Entity):在Hibernate中,实体代表数据库中的表,是业务逻辑中的一个对象。在Android应用中,实体通常是一个Java类,通过@Entity注解标识。 2. 属性(Attribute):实体类中的字段对应数据库表中的列,...
延迟加载是Hibernate的一个重要特性,它只在真正需要时才加载关联对象,从而避免了大量无谓的数据获取。这种机制依赖于代理对象和Hibernate的反射机制。 八、实体生命周期管理 Hibernate定义了实体的几种状态:瞬...
在Java编程领域,Hibernate是一个非常流行的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据。本项目通过Java的反射和注解技术,试图模拟Hibernate的部分功能,以便更好...
Hibernate是一个流行的关系型数据库管理系统(RDBMS)到Java对象的映射工具,它极大地简化了数据访问层的开发。通过使用Hibernate,开发者可以避免编写大量的SQL代码,转而使用面向对象的方式来操作数据库。 1. **...
【描述】在Java开发中,Hibernate是一个非常流行的对象关系映射(ORM)框架,它简化了数据库操作,将Java对象与数据库表之间的映射关系自动化处理。而"dom4j+xml仿hibernate"项目则试图模拟这一过程,帮助开发者了解...
例如,你可以定义一个`MapKeyFactory`接口,然后使用KeyFactory生成处理特定数据类型的实例,如`newInstance(int a, String[] b, boolean c)`,这将创建一个对应于这种数据结构的键。 总的来说,CGLIB在Hibernate中...
Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并调用其方法。在SSH(Struts、Spring、Hibernate)框架中,反射被广泛用于实现灵活的控制逻辑和数据绑定。理解Java反射原理对于...
Hibernate是一个开源的对象关系映射(ORM)框架,它允许Java开发者将数据库操作转换为对象级别的操作,从而简化了数据访问层的开发。在 Hibernate 3.2 版本中,这个框架已经相当成熟,提供了丰富的功能和性能优化。...
在Java开发中,Hibernate是一个流行的开源对象关系映射(ORM)框架,它极大地简化了数据库操作。本授课提纲旨在提供一个简单易懂的Hibernate学习路径,帮助初学者理解和掌握其核心概念及应用。 一、回顾JDBC数据库...
- **增加(Create)**:创建一个实体对象,通过反射设置其属性,然后使用反射调用对应的DAO方法,生成SQL语句并执行插入操作。 - **删除(Delete)**:根据ID或其他唯一标识符,动态生成删除语句并执行。 - **更新...
Hibernate,作为一款广泛应用的Java对象关系映射(ORM)框架,为开发者提供了便捷的数据持久化解决方案。源代码的学习是理解其工作原理、优化应用的关键。本文将基于Hibernate 3.2.5的源码,结合Eclipse开发环境,...