package com.sunjing.util;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.apache.log4j.Logger;
/**
* 反射工具
* @author Administrator
*
*/
@SuppressWarnings({"unchecked","deprecation"})
public class ReflectUtil {
private static Logger m_logger = Logger.getLogger(ReflectUtil.class);
/**
*
* 动态的绑定对象 通过类名
* @param bean 执行对象
* @param objName 做参数的对象的名称字符串
*/
public static void setObjectFiledValue(Object bean, String objName,String objValue) {
String methodName = getMethodName(objName);
try {
Method getMethod = bean.getClass().getMethod("get" + methodName, new Class[] {});
Class cls = getMethod.getReturnType();
// 把对象填充
Method setMethod = bean.getClass().getMethod("set" + methodName, new Class[] { cls });
setMethod.invoke(bean, new Object[] { objValue });
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 创建对象通过类中的属性名
* @param bean
* @param objName
* @return
*/
public static Object createObjectToObjName(Object bean, String objName) {
String methodName = getMethodName(objName);
try {
Method getMethod = bean.getClass().getMethod("get" + methodName, new Class[] {});
Class cls = getMethod.getReturnType();
Object obj = getMethod.invoke(bean, new Object[] {});
if (obj == null) {
obj = cls.newInstance();
}
return obj;
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
/**
* 通过get***获取对象的基本类型字段值
* @param obj 对象
* @param fieldName 字段名
* @return
*/
public static Object getBaseFieldValue(Object obj,String fieldName){
//得到方法名
String method = getMethodName(fieldName);
try {
//get方法
Method getMethod = obj.getClass().getMethod("get" + method, new Class[]{});
Object fieldValue = getMethod.invoke(obj, new Object[]{});
return fieldValue;
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
}
return null;
}
/**
* 通过get***获取对象的对象字段值
* @param obj 对象
* @param objectFieldName 对象字段名
* @return
*/
public static Object getObjectFieldValue(Object obj,String objectFieldName){
//得到方法名
String method = getMethodName(objectFieldName);
try {
//get方法
Method getMethod = obj.getClass().getMethod("get" + method, new Class[]{});
// Class cls = getMethod.getReturnType();
Object objFieldValue = getMethod.invoke(obj, new Object[]{});
// 如果对象未初次化
// if (objFieldValue == null) {
// objFieldValue = cls.newInstance();
// }
return objFieldValue;
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
}
return null;
}
/**
* 动态赋值给系统对象 String Integer Long Float Date 等
*
* @param obj
* 执行对象
* @param fieldName
* 属性
* @param fieldValue
* 参数
*/
public static void bindFieldValue(Object obj,String fieldName,String fieldValue){
//得到方法名
String method = getMethodName(fieldName);
try {
//get方法
Method getMethod = obj.getClass().getMethod("get" + method, new Class[]{});
//得到参数类型
Class cls = getMethod.getReturnType();
//set方法
Method setMethod = obj.getClass().getMethod("set"+method,new Class[]{cls});
// //当参数为空时直接赋予NULL值
// if (fieldValue.trim().equals("")) {
// setMethod.invoke(obj, new Object[]{null});
// return;
// }
//根据不同的系统对象转换
if (cls == String.class) {
setMethod.invoke(obj, new Object[] { fieldValue });
return;
} else if (cls == Integer.class || cls == Float.class || cls == Long.class || cls == Double.class
|| cls == Byte.class || cls == Boolean.class || cls == Character.class || cls== java.sql.Timestamp.class) {
Method valueOf = cls.getMethod("valueOf", new Class[] { String.class });
Object valueObj = valueOf.invoke(cls, new Object[] { fieldValue });
setMethod.invoke(obj, new Object[] { valueObj });
} else if (cls == java.util.Date.class || cls == java.sql.Date.class) {
Object dateObj = cls.newInstance();
setMethod.invoke(obj, new Object[] { dateObj });
}
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
} catch (InstantiationException e) {
// TODO Auto-generated catch block
m_logger.error(e);
e.printStackTrace();
}
}
/**
* 动态赋值给自定义对象
* @param bean 执行对象
* @param objName 做参数的对象
* @param propertyName 做参数的对象的属性名称
* @param value 参数
*/
public static void bindSubObject(Object bean, String objName, String propertyName, String value) {
String methodName = getMethodName(objName);
try {
Method getMethod = bean.getClass().getMethod("get" + methodName, new Class[] {});
Class cls = getMethod.getReturnType();
Object obj = getMethod.invoke(bean, new Object[] {});
// // 判断参数为空,直接设置NULL值.
// if (value.trim().equals("")) {
// if (obj != null) {
// Method setMethod = bean.getClass().getMethod("set" + methodName, new Class[] { cls });
// setMethod.invoke(bean, new Object[] { null });
// }
// return;
// }
// 如果对象未初次化
if (obj == null) {
obj = cls.newInstance();
}
// 设置普通系统对象的属性
bindFieldValue(obj, propertyName, value);
// 把对象填充
Method setMethod = bean.getClass().getMethod("set" + methodName, new Class[] { cls });
setMethod.invoke(bean, new Object[] { obj });
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
}
}
/**
*
* 动态的绑定对象 通过类名
* @param bean 执行对象
* @param objName 做参数的对象的名称字符串
*/
public static void bindObject(Object bean, String objName) {
String methodName = getMethodName(objName);
try {
Method getMethod = bean.getClass().getMethod("get" + methodName, new Class[] {});
Class cls = getMethod.getReturnType();
Object obj = getMethod.invoke(bean, new Object[] {});
if (obj == null) {
obj = cls.newInstance();
}
// 把对象填充
Method setMethod = bean.getClass().getMethod("set" + methodName, new Class[] { cls });
setMethod.invoke(bean, new Object[] { obj });
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
*
* 动态的绑定对象 通过对象
* @param beanOne 对象1
* @param beanTwo 对象2
*/
public static void bindObjectFromObject(Object beanOne, Object beanTwo) {
try {
Method setMethod = beanOne.getClass().getMethod("set" + beanTwo.getClass().getSimpleName(), new Class[] { beanTwo.getClass() });
setMethod.invoke(beanOne, new Object[] { beanTwo });
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 获取对象方法的名字
* @param objName 对象
* @return
*/
private static String getMethodName(String objName) {
String funName = objName.substring(0, 1).toUpperCase();
if (objName.length() > 1) {
funName += objName.substring(1, objName.length());
}
return funName;
}
/**
*
* @param className
* @return
*/
public static Object createObject(String className) {
try {
Class classType = Class.forName(className);
Object classObj = classType.newInstance();
return classObj;
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
}
return null;
}
/**
*
* @param className 类名(包含路径)
* @param parameterTypes 构造函数的参数类型 Class[]
* @param parameterValues 构造函数传入的值 Object[]
* @return
*/
public static Object createObjectToConstructor(String className,Class[] parameterTypes,Object[] parameterValues) {
try {
Class classType = Class.forName(className);
Object classObj = classType.getConstructor(parameterTypes).newInstance(parameterValues);
return classObj;
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
m_logger.error(e);
}
return null;
}
}
分享到:
相关推荐
该工具类下载后拷贝到你要用的包,只需该包名即可
java的泛型和反射机制一直很难理解和应用,这个程序是关于反射和泛型的综合使用,主要实现获取一个类的属性名和方法,并可以获取属性值,存取属性值,属性名和属性值的字符...只是个工具类,没有写测试类,自己测试下啊
这个“Java反射调用工具类”可能是为了简化和封装这些复杂的反射操作而创建的一个实用工具类。 首先,`JobProxy.java`可能是一个代理类,它利用反射来动态地调用目标对象的方法。在Java中,代理模式通常用于在不...
java * 反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class,java * 反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class,java * 反射工具...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息。这个特性使得Java具备了高度的灵活性,能够在运行时动态地发现和使用类的属性和方法,即使这些信息在编译时...
使用java 反射 将HttpServletRequest 中页面参数动态的注入到 javabean对象的辅助工具类,觉得还不错!
一个Java反射工具类,可以完成查询字段值以及设置字段值的功能。
提供以下几个功能: 1. 取最简类名 2. 动态赋值 3. 动态取值 4. 判断是否普通类型(自定义成员变量) 5. 动态取指定类的所有属性名
进行数据库查询操作经常用到,包括getDeclaredField、getDeclaredMethod、getFieldValue、getSuperClassGenricType、getSuperGenericType、invokeMethod、makeAccessible、setFieldValue
ReflectUtil java反射工具类
java组件开发(13)反射工具类
在Java编程语言中,反射(Reflection)是一种强大的工具,它允许程序在运行时检查和操作类、接口、字段和方法等对象。枚举(Enumeration)是Java中的一个特殊类类型,用于定义一组常量。本项目"test-enum-demo-...
StringData JPA 反射生成 自定义显示类集合 !!
6. **反射API**:Java反射机制允许程序在运行时动态地获取类的信息(如类名、方法名)并调用它们,这在配置文件驱动的应用、插件系统和单元测试中十分有用。 7. **异常处理**:`Exception`类及其子类构成了Java的...
9. **反射工具类**: 反射是Java强大的特性之一,反射工具类可以帮助开发者动态地获取和操作类、接口、字段和方法。例如,`ReflectionUtils`可以用来创建对象、调用方法、获取字段值等。 10. **编码解码工具类**: ...
7. **反射工具类**:如Java的java.lang.reflect包,或Google的Reflections库,用于运行时检查和操作类、接口、字段和方法。 8. **编码解码工具类**:如Base64编码解码,可以在Java 8的java.util.Base64中找到,或者...
本文将详细介绍如何使用Java反射技术来获取内部类中的静态成员变量的值。 #### 二、背景知识 在深入探讨之前,我们需要了解几个基本概念: 1. **内部类**:内部类是一种特殊的类,定义在另一个类(外部类)的内部。...
3. **Apache Commons Lang**:Apache软件基金会的一个开源项目,提供了大量扩展Java语言特性的工具类,如字符串处理、数组操作、反射、枚举操作等。 - `StringUtils`:提供了丰富的字符串操作方法,如空白字符处理...