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 反射 将HttpServletRequest 中页面参数动态的注入到 javabean对象的辅助工具类,觉得还不错!
一个Java反射工具类,可以完成查询字段值以及设置字段值的功能。
提供以下几个功能: 1. 取最简类名 2. 动态赋值 3. 动态取值 4. 判断是否普通类型(自定义成员变量) 5. 动态取指定类的所有属性名
java反射,设置属性值,获得属性,具有多个对象同事设置,缓存的处理,
NULL 博文链接:https://shulinshulinzi.iteye.com/blog/2372372
进行数据库查询操作经常用到,包括getDeclaredField、getDeclaredMethod、getFieldValue、getSuperClassGenricType、getSuperGenericType、invokeMethod、makeAccessible、setFieldValue
ReflectUtil java反射工具类
java组件开发(13)反射工具类
StringData JPA 反射生成 自定义显示类集合 !!
文件工具类,Http请求工具类,图片处理工具类。Ip工具类。mail工具类,Map工具类,MD5编码工具类,数字工具类,随机数工具类,反射工具类,字符串处理工具类,URL工具类,XML工具类,常用的数据验证工具类
java 反射工具类,适用于框架开发、平台建设等项目
反射技术集合,针对对象的反射操作,包含:判断对象属性是否为空、清空对象、读取设置属性等等,比较实用
该代码经过作者的优化,可直接使用,反射一个实体,从试题中获取值
java基础工具类iceroot ...该工具类将简单易学作为编码 的第一原则. 包含的方法举例: 字符串截取 驼峰下划线互转 执行命令行 反射调用方法 集合操作 日期格式化与解析 时分秒转换 uuid生成 常用的常量 执行sql
使用的cglib+缓存 1千万次空方法调用 大概3秒~ 直接反射的速度为10秒~ 缓存后反射为 6秒~ 取出安全验证缓存后的速度为 4秒左右~ 另外大概有2秒的性能消耗在字符串拼接缓存中的key造成~ 因此上面带缓存的反射方案...
主要为大家详细介绍了java常用工具类,包括Reflect反射工具类、String字符串工具类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下