您的位置:首页 > 编程语言 > Java开发

自己用反射写的一个javaBean工具类

2012-02-05 14:48 323 查看
老师上课给我们讲了点关于反射的知识,于是我在网上找了点资料,自己用反射写了个工具类.

适用范围:当我们在jsp页面需要接收很多值的时候,如果用request.getParameter(属性名)一个一个写的话那就太麻烦了,于是我想是否能用反射写个工具类来简化这样的代码,经过1个小时的代码修改调试,终于雏形出来了,很高兴调试成功,呵呵,代码贴出来.

View Code

package com.student.util;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

public class BuildBeanUtil {
@SuppressWarnings("unchecked")
public <T> T buildBean(HttpServletRequest request,Class<T> beanClass) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
//beanClass set方法
List<Method> setMethods=new ArrayList<Method>();
//beanClass set方法名
List<String> setMethodNames=new ArrayList<String>();
//beanClass 属性名
List<String> propertyNames=new ArrayList<String>();
//表单数据
List<String> formValues=new ArrayList<String>();
//1、获得该JavaBean的所有的set方法
Method[] methods=beanClass.getMethods();
for(Method m:methods){
if(m.getName().indexOf("set")==0){
setMethods.add(m);
}
}
//2、实例化该javaBean
Object beanObj=beanClass.newInstance();
//3、循环set方法数组
for(Method m:setMethods){
String methodName=m.getName();
//3-1、获得方法名
setMethodNames.add(methodName);
//3-2、通过方法名推测出属性名
String name=methodName.substring(3).toLowerCase();
propertyNames.add(name);
}
//3-3、通过request.getParameter(属性名)获得表单数据
for(String p:propertyNames){
String value=request.getParameter(p);
formValues.add(value);
}
//3-4、将表单数据转型成为正确的类型,该类型为此set方法的第一个参数的类型
for(int i=0;i<setMethods.size();i++){
Method m=setMethods.get(i);
String type=m.getGenericParameterTypes()[0].toString();

String value=formValues.get(i);
//判断参数数据类型
//3-5、调用上面实例化的javaBean的此set方法
if(type.equals("class java.lang.String")){
m.invoke((T)beanObj, value);
}else if(type.equals("class java.lang.Integer")){
m.invoke((T)beanObj, Integer.parseInt(value));
}
}
//4、返回该javaBean
return (T) beanObj;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐