自己用反射写的一个javaBean工具类
老师上课给我们讲了点关于反射的知识,于是我在网上找了点资料,自己用反射写了个工具类.
适用范围:当我们在jsp页面需要接收很多值的时候,如果用request.getParameter(属性名)一个一个写的话那就太麻烦了,于是我想是否能用反射写个工具类来简化这样的代码,经过1个小时的代码修改调试,终于雏形出来了,很高兴调试成功,呵呵,代码贴出来.
View Code
1 package com.student.util;
2
3 import java.lang.reflect.InvocationTargetException;
4 import java.lang.reflect.Method;
5 import java.util.ArrayList;
6 import java.util.List;
7
8 import javax.servlet.http.HttpServletRequest;
9
10 public class BuildBeanUtil {
11 @SuppressWarnings("unchecked")
12 public <T> T buildBean(HttpServletRequest request,Class<T> beanClass) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
13 //beanClass set方法
14 List<Method> setMethods=new ArrayList<Method>();
15 //beanClass set方法名
16 List<String> setMethodNames=new ArrayList<String>();
17 //beanClass 属性名
18 List<String> propertyNames=new ArrayList<String>();
19 //表单数据
20 List<String> formValues=new ArrayList<String>();
21 //1、获得该JavaBean的所有的set方法
22 Method[] methods=beanClass.getMethods();
23 for(Method m:methods){
24 if(m.getName().indexOf("set")==0){
25 setMethods.add(m);
26 }
27 }
28 //2、实例化该javaBean
29 Object beanObj=beanClass.newInstance();
30 //3、循环set方法数组
31 for(Method m:setMethods){
32 String methodName=m.getName();
33 //3-1、获得方法名
34 setMethodNames.add(methodName);
35 //3-2、通过方法名推测出属性名
36 String name=methodName.substring(3).toLowerCase();
37 propertyNames.add(name);
38 }
39 //3-3、通过request.getParameter(属性名)获得表单数据
40 for(String p:propertyNames){
41 String value=request.getParameter(p);
42 formValues.add(value);
43 }
44 //3-4、将表单数据转型成为正确的类型,该类型为此set方法的第一个参数的类型
45 for(int i=0;i<setMethods.size();i++){
46 Method m=setMethods.get(i);
47 String type=m.getGenericParameterTypes()[0].toString();
48
49 String value=formValues.get(i);
50 //判断参数数据类型
51 //3-5、调用上面实例化的javaBean的此set方法
52 if(type.equals("class java.lang.String")){
53 m.invoke((T)beanObj, value);
54 }else if(type.equals("class java.lang.Integer")){
55 m.invoke((T)beanObj, Integer.parseInt(value));
56 }
57 }
58 //4、返回该javaBean
59 return (T) beanObj;
60 }
61
62 }