java反射机制是什么

反射机制是在运行状态中,可以知道任何一个类的属性和方法,并且调用类的属性和方法;

反射机制能够做什么

1、判断运行对象的所属类

2、构造任意一个类的对象

3、获取任意一个类的属性和方法

4、调用任意属性和方法

5、生成动态代理

利用反射将结果集封装成为对象或者集合(实测可用)

package coral.base.util;

import java.beans.IntrospectionException;

import java.beans.PropertyDescriptor;

import java.lang.reflect.Field;

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.Date;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import wfc.service.database.RecordSet;

public class ReflectUtils {

/**

* 将一个map集合封装成为bean对象


*
* @param param

* @param clazz

* @return

*/

public static <T> T MapToBean(Map<String, Object> param, Class<?> clazz) {

Object value = null;

Class[] paramTypes = new Class[1];

Object obj = null;

try {

obj = clazz.newInstance();

// 获取类的属性

Field[] declaredFields = clazz.getDeclaredFields();

// 获取父类或接口的公有属性

Field[] superFields = clazz.getSuperclass().getFields();

List<Field[]> list = new ArrayList<Field[]>();

if (declaredFields != null) {

list.add(declaredFields);

}

if (superFields != null) {

list.add(superFields);

}

for (Field[] fields : list) {

for (Field field : fields) {

String fieldName = field.getName();

// 获取属性对应的值ֵ

value = param.get(fieldName);

// 把值设置进入对象属性中 这里可能是有属性但是没有相应的set方法,所以要做异常处理

try {

PropertyDescriptor pd = new PropertyDescriptor(

fieldName, clazz);

Method method = pd.getWriteMethod();

method.invoke(obj, new Object[] { value });

} catch (Exception e1) {

}

}

}

} catch (Exception e1) {

}
return (T) obj;

}

/**

* 获取类的所有属性,包括父类和接口

* @param clazz

* @return

*/

public static List<Field[]> getBeanFields(Class<?> clazz) {

List<Field[]> list = new ArrayList<Field[]>();

Field[] declaredFields = clazz.getDeclaredFields();

Field[] superFields = clazz.getSuperclass().getFields();

if (declaredFields != null) {

list.add(declaredFields);

}

if (superFields != null) {

list.add(superFields);

}

return list;

}
/**

* 从结果集中获取出值

* @param fieldName

* @param rs

* @return

*/

public static Object getFieldValue(String fieldName, ResultSet rs) {

Object value = null;

try {

//捕获值不存在的异常

value = rs.getObject(fieldName);

return value;

} catch (SQLException e) {

//oracle数据库的列都是大写,所以才查找一次

fieldName = fieldName.toLowerCase();

try {

value = rs.getObject(fieldName);

return value;

} catch (SQLException e1) {

//结果集中没有对应的值,返回为空

return null;

}

}

}

/**

* 方法重载,

* @param fieldName

* @param rs 这个是封装过的结果集

* @return

*/

public static Object getFieldValue(String fieldName, RecordSet rs) {

Object value = null;

value = rs.getObject(fieldName);

return value;

}

/**

* 方法重载

* @param rs 封装过的结果集

* @param clazz

* @return

*/

public static <T> T RSToBean(RecordSet rs, Class<?> clazz) {

Object obj = null;

List<Field[]> list = getBeanFields(clazz);

try {

obj = clazz.newInstance();

for (Field[] fields : list) {

for (Field field : fields) {

String fieldName = field.getName();

// String fieldName = field.getName();ֵ

Object value = getFieldValue(fieldName, rs);

try {

PropertyDescriptor pd = new PropertyDescriptor(

fieldName, clazz);

Method method = pd.getWriteMethod();

method.invoke(obj, new Object[] { value });

} catch (Exception e1) {

}

}

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return (T) obj;

}

/**

* 把结果集封装成为bean对象

* @param rs

* @param clazz

* @return

*/

public static <T> T RSToBean(ResultSet rs, Class<?> clazz) {

Object obj = null;

List<Field[]> list = getBeanFields(clazz);

try {

while (rs.next()) {

obj = clazz.newInstance();


for (Field[] fields : list) {

for (Field field : fields) {

String fieldName = field.getName();

// String fieldName = field.getName();ֵ

Object value = getFieldValue(fieldName, rs);

PropertyDescriptor pd = new PropertyDescriptor(

fieldName, clazz);

Method method = pd.getWriteMethod();

method.invoke(obj, new Object[] { value });

}

}

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}
return (T) obj;

}
/**

* 把结果集封装成为List


*
* @param rs

* @param clazz

* @return

*/

public static <T> List<T> RsToList(ResultSet rs, Class<?> clazz) {

ArrayList<T> objList = new ArrayList<T>();

// 获取所有的属性

List<Field[]> list = getBeanFields(clazz);

try {

while (rs.next()) {

// 定义临时变量

Object tempObeject = clazz.newInstance();

// 添加到属性中

for (Field[] fields : list) {

for (Field field : fields) {

String fieldName = field.getName();

// 获取属性值ֵ

Object value = getFieldValue(fieldName, rs);

PropertyDescriptor pd = new PropertyDescriptor(

fieldName, clazz);

Method method = pd.getWriteMethod();

method.invoke(tempObeject, new Object[] { value });

}

}

objList.add((T) tempObeject);

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return objList;

}
}

                                <link rel="stylesheet" href="http://csdnimg.cn/release/phoenix/production/markdown_views-e9ce07d7e5.css">
</div>

利用java反射将结果集封装成为对象和对象集合的更多相关文章

  1. 利用java反射机制 读取配置文件 实现动态类载入以及动态类型转换

    作者:54dabang 在spring的学习过程之中,我们能够看出通过配置文件来动态管理bean对象的优点(松耦合 能够让零散部分组成一个总体,而这些总体并不在意之间彼此的细节,从而达到了真正的物理上 ...

  2. 利用Java反射实现JavaBean对象相同属性复制并初始化目标对象为空的属性的BeanUtils

    有时遇到将数据传输对象转换成JSON串会将属性值为空的属性去掉,利用Java反射实现JavaBean对象数据传输对象的相同属性复制并初始化数据传输对象属性为空的属性,然后转换成JSON串 packag ...

  3. 利用JAVA反射机制设计通用的DAO

    利用JAVA反射机制设计一个通用的DAO 反射机制 反射机制指的是程序在运行时能够获取自身的信息.在java中,只要给定类的名字,    那么就可以通过反射机制来获得类的所有信息. 反射机制创建类对象 ...

  4. 利用Java反射机制对实体类的常用操作工具类ObjectUtil

    代码: ObjectUtil类: import java.lang.reflect.Field; import java.math.BigDecimal; import java.text.Simpl ...

  5. 利用Java反射根据类的名称获取属性信息和父类的属性信息

    代码: import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java ...

  6. 利用java反射调用类的的私有方法--转

    原文:http://blog.csdn.net/woshinia/article/details/11766567 1,今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为 ...

  7. 利用Java反射机制将Bean转成Map

    import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang ...

  8. Java反射机制demo(一)—实例化Class对象,并获得其他类包名和类型

    Java反射机制demo(一)——实例化Class对象,通过对象获得包名和类型 使用Java中的 本地类作为实验对象,避免自定义的类带来的一些不便. public static void main(S ...

  9. 不使用BeanUtils,利用Java反射机制:表单数据自动封装到JavaBean

    在百度搜“java反射 将表单数据自动封装到javabean ”,第一页显示的都是一样的代码,都是利用导入第三方jar包<commons-beanutils>和<commons-lo ...

随机推荐

  1. HDU 2017 Multi-University Training Contest - Team 4 1009 1011

    Questionnaire Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)T ...

  2. POJ 2079 Triangle 旋转卡壳求最大三角形

    求点集中面积最大的三角形...显然这个三角形在凸包上... 但是旋转卡壳一般都是一个点卡另一个点...这种要求三角形的情况就要枚举底边的两个点 卡另一个点了... 随着底边点的递增, 最大点显然是在以 ...

  3. vue2细节变化的用法

    1.v-el和v-ref合并为一个属性:ref 原来:v-el:my-element 现在: ref="myElement", v-ref:my-component 变成了这样:  ...

  4. colrm---删除文件制定列

  5. Knockout 重新绑定注意要点

    function ReImport(id) { //点击按钮时调用函数名称, var node = document.getElementById('bindingNode'); //bindingN ...

  6. 【2017 Multi-University Training Contest - Team 4】Time To Get Up

    [Link]: [Description] [Solution] 把每个数字长什么样存到数组里就好;傻逼题. (直接输入每一行是什么样子更快,不要一个字符一个字符地输入) [NumberOf WA] ...

  7. C++ static 静态成员变量 和 静态成员函数

    静态(static) 成员 变量 1•  静态成员变量的初始化须要在类外完毕. 2•  静态成员不属于详细的某个对象,而属于整个类: 3•  全部对象共享本类中的静态成员: 4•  静态成员最好直接通 ...

  8. D. Dreamoon and Sets(Codeforces Round #272)

    D. Dreamoon and Sets time limit per test 1 second memory limit per test 256 megabytes input standard ...

  9. POJ 1738 An old Stone Game(石子合并 经典)

    An old Stone Game Time Limit: 5000MS   Memory Limit: 30000K Total Submissions: 3672   Accepted: 1035 ...

  10. (转)Tomcat目录结构

    首先来了解一下Tomcat5.5的目录结构: /bin:存放windows或Linux平台上启动和关闭Tomcat的脚本文件 /conf:存放Tomcat服务器的各种全局配置文件,其中包括server ...