import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
/**
* @className:ReflectionUtil.java
* @classDescription: 反射工具类
* @author:qiuchen
* @createTime:2012-7-4
*/
public class ReflectionUtil {
public static boolean isShow = true;
/**
* 获得一个对象的属性值
* @author:qiuchen
* @createTime:2012-7-4
* @param obj 目标对象
*/
@SuppressWarnings("unchecked")
public static String getFieldValue(Object obj){
if (isShow) return getFieldValue(obj, isShow);
return null;
}
/**
* 打印一个对象的属性值
* @author:qiuchen
* @createTime:2012-7-8
* @param obj
*/
public static void printFieldValue(Object obj){
if (isShow) System.out.println(getFieldValue(obj, isShow));
}
/**
* 获得一个对象的属性值
* @author:qiuchen
* @createTime:2012-7-4
* @param obj 目标对象
*/
@SuppressWarnings("unchecked")
private static String getFieldValue(Object obj,boolean isShow){
Class cls = obj.getClass();
Method[] methods = cls.getDeclaredMethods();//获得类的方法集合
StringBuffer buffer = new StringBuffer();
try {
for (Method method : methods) {
if(method!=null && method.getName().startsWith("get")){
Object value = method.invoke(obj,null);
value = method.getName().substring(3)+":"+value+",";
buffer.append(value);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return cls.toString()+"["+buffer.toString()+"]";
}
/**
* Servlet从页面表单域中取值,封装到一个JavaBean中
* *****页面表单域部分所有实体属性必须小写
* *****目前仅仅支持基本数据类型的赋值
* @author:qiuchen
* @createTime:2012-7-8
* @param <T>泛型,可以代替任何java对象
* @param request请求对象
* @param beanClass表单JavaBean类对象
* @return 表单JavaBean实例
*/
@SuppressWarnings("unchecked")
public static <T> T buildBean(HttpServletRequest request,Class<T> beanClass){
//beanClass all setMethod
List<Method> setMethods = new ArrayList<Method>();
//beanClass all setMethod'name
List<String> setMethodNames = new ArrayList<String>();
//beanClass all property'name
List<String> propertyNames = new ArrayList<String>();
//page form values
List<String> formValues = new ArrayList<String>();
//beanClass all Method
Method[] methods = beanClass.getDeclaredMethods();
//catch all setMethod
for(Method m : methods){
if(m!=null && m.getName().startsWith("set")) setMethods.add(m);
}
//实例化Bean
Object beanObj = null;
try {
beanObj = beanClass.newInstance();
//通过方法名封装方法名和属性名
for(Method m : setMethods){
//method name
String mn = m.getName();
//property name
String propertyName = mn.replace("set","").toLowerCase();
setMethodNames.add(mn);
propertyNames.add(propertyName);
}
//通过request.getParameter(属性名)获得表单数据
for(String property : propertyNames){
formValues.add(request.getParameter(property));
}
//把表单对象属性值转为正确的类型(set方法参数类型)后实例化对象
int index = 0;
for(Method m : setMethods){
String type = m.getParameterTypes()[0].toString();
if(type.indexOf(".")>-1){
type = type.substring(type.lastIndexOf(".")+1);
}
String value = formValues.get(index);
if(value == null || "".equals(value)){
index ++;
continue;
}
//List,自定义类目前不支持赋值
if("String".endsWith(type)){
m.invoke(beanObj,value);
}else if("int".endsWith(type) || "Integer".endsWith(type)){
m.invoke(beanObj, Integer.parseInt(value));
}else if("double".endsWith(type) || "Double".endsWith(type)){
m.invoke(beanObj, Double.parseDouble(value));
}else if("float".endsWith(type) || "Float".endsWith(type)){
m.invoke(beanObj, Float.parseFloat(value));
}
index ++;
}
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return (T)beanObj;
}
}
相关推荐
该工具类下载后拷贝到你要用的包,只需该包名即可
一个Java反射工具类,可以完成查询字段值以及设置字段值的功能。
Java反射工具类主要指的是`java.lang.reflect`包中的类,它们提供了对类、接口、字段和方法的动态访问能力。这篇博文通过链接可能详细解释了如何利用这些工具类来实现一些高级功能。 1. `Class<?>`: 这是反射的核心...
java的泛型和反射机制一直很难理解和应用,这个程序是关于反射和泛型的综合使用,主要实现获取一个类的属性名和方法,并可以获取属性值,存取属性值,属性名和属性值的字符...只是个工具类,没有写测试类,自己测试下啊
ReflectUtil java反射工具类
这个“Java反射调用工具类”可能是为了简化和封装这些复杂的反射操作而创建的一个实用工具类。 首先,`JobProxy.java`可能是一个代理类,它利用反射来动态地调用目标对象的方法。在Java中,代理模式通常用于在不...
java 反射工具类,适用于框架开发、平台建设等项目
反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被AOP过的真实类等工具函数.反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息。这个特性使得Java具备了高度的灵活性,能够在运行时动态地发现和使用类的属性和方法,即使这些信息在编译时...
使用java 反射 将HttpServletRequest 中页面参数动态的注入到 javabean对象的辅助工具类,觉得还不错!
反射技术集合,针对对象的反射操作,包含:判断对象属性是否为空、清空对象、读取设置属性等等,比较实用
java * 反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class,java * 反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class,java * 反射工具...
进行数据库查询操作经常用到,包括getDeclaredField、getDeclaredMethod、getFieldValue、getSuperClassGenricType、getSuperGenericType、invokeMethod、makeAccessible、setFieldValue
java组件开发(13)反射工具类
6. **反射API**:Java反射机制允许程序在运行时动态地获取类的信息(如类名、方法名)并调用它们,这在配置文件驱动的应用、插件系统和单元测试中十分有用。 7. **异常处理**:`Exception`类及其子类构成了Java的...
JavaUtils工具类是Java开发中常见的一类辅助代码集合,它们通常包含各种静态方法,用于简化常见的编程任务,提高开发效率。这篇博文链接(已提供但无法直接访问)可能详细探讨了JavaUtils工具类的设计原则、常用方法...
3. **Apache Commons Lang**:Apache软件基金会的一个开源项目,提供了大量扩展Java语言特性的工具类,如字符串处理、数组操作、反射、枚举操作等。 - `StringUtils`:提供了丰富的字符串操作方法,如空白字符处理...
"java常用工具类"这个主题涵盖了Java开发中常用的类和方法,这些工具类可以帮助我们简化编程工作,提高代码的可读性和可维护性。在Java中,`java.util`包就是这样一个包含大量工具类的包,提供了很多实用的功能。 1...