• 自己用反射写的一个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 }
  • 相关阅读:
    tensorflow模型保存和使用08
    LSTM最基本的应用(07-3)
    手写数字识别-卷积神经网络cnn(06-2)
    python面向对象笔记
    attention机制
    dockerfile
    docker入门
    CentOS7安装Oracle11gR2
    anaconda常用的命令
    python xlrd处理表格常用方法
  • 原文地址:https://www.cnblogs.com/Laupaul/p/2339001.html
Copyright © 2020-2023  润新知