`
longgangbai
  • 浏览: 7328420 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于根据方法名称调用方法的反射的实现的集中方案

阅读更多

 

     项目中将客户的信息保存到本地的Cookie中的使用的:由于每次查询时可以从Cookie中获取,如果改变必须保存到Cookie中,同时Cookie中的值仅仅为字符串形式保存在本地磁盘使用所以必须确保值为字符串格式。同时实时转换。

 

/**
  * 从Cookie获取的对象
  *
  * @param request
  */
 @SuppressWarnings("unchecked")
 public static VacationOrderConditionConvertor getFieldProperty2VacationOrderConditionConvertor(HttpServletRequest request) {
  List<FieldProperty> propertys = getClientVacationSetting(request);


  if (CollectionUtils.isNotEmpty(propertys)) {


   VacationOrderConditionConvertor convertor = new VacationOrderConditionConvertor();


   for (FieldProperty fieldProperty : propertys) {


    String propertyName = fieldProperty.getPropertyName();
    String propertyValue = fieldProperty.getPropertyValue();


    if (StringUtils.isBlank(propertyValue)) {
     continue;
    }


    try {

    //获取方法名称
     String methodName = "set" + propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1);

 


     System.out.println("method =" + methodName);

    //采用Spring的中ReflectionUtils获取方法并调用

     if (fieldProperty.getClazz() == String.class) {
 

      Method method = ReflectionUtils.findMethod(convertor.getClass(), methodName, new Class[] { String.class });
      method.invoke(convertor, methodName, String.valueOf(propertyValue));

  //采用Apache Commons BeanUtils中的 MethodUtils获取方法并调用

     } else if (fieldProperty.getClazz() == Long.class) {
      MethodUtils.invokeMethod(convertor, methodName, new Object[] { Long.valueOf(propertyValue) });

 

  //采用原始的反射代码s获取方法并调用

     } else if (fieldProperty.getClazz() == Enum.class) {
      Method method = ReflectionUtils.findMethod(VacationOrderConditionConvertor.class, methodName, new Class[] { Enum.class });
      method.invoke(convertor, Enum.valueOf(fieldProperty.getClazz(), propertyValue));


     }

//采用Spring的中ReflectionUtils反射处理异常的信息
    } catch (InvocationTargetException e) {
     ReflectionUtils.handleReflectionException(e);
    } catch (NoSuchMethodException e) {
     ReflectionUtils.handleReflectionException(e);
    } catch (IllegalAccessException e) {
     ReflectionUtils.handleReflectionException(e);
    }
   }
  }
  return null;
 }

分享到:
评论

相关推荐

    根据窗体名动态调用窗体的例子

    在本例中,“根据窗体名动态调用窗体的例子”将向我们展示如何利用反射机制实现这一功能。 反射是.NET框架提供的一种强大的工具,它允许程序在运行时检查自身的行为和结构,包括类、方法、属性等。通过反射,我们...

    CLR.via.C#.(中文第3版)(自制详细书签)Part2

    13.4 关于调用接口方法的更多探讨 13.5 隐式和显式接口方法实现(幕后发生的事情) 13.6 泛型接口 13.7 泛型和接口约束 13.8 实现多个具有相同方法名和签名的接口 13.9 用显式接口方法实现来增强编译时类型安全...

    c#创建插件业务平台

    2. **反射分析**:使用C#的反射机制来分析DLL文件中的所有实现类和方法。 3. **实例化外部构件**:在平台容器中实例化外部构件,并执行插件点的方法。 4. **动态绑定**:实现算法不再是编码硬绑定,而是通过反射机制...

    C# 程序集和反射详解

    例如,`typeof(MyClass)`会返回MyClass类型的Type对象,然后可以使用`Activator.CreateInstance`方法根据Type对象创建实例。此外,`MethodInfo`和`PropertyInfo`等类提供了访问和操作方法、属性的具体方法。 然而,...

    CLR.via.C#.(中文第3版)(自制详细书签)Part1

    13.4 关于调用接口方法的更多探讨 13.5 隐式和显式接口方法实现(幕后发生的事情) 13.6 泛型接口 13.7 泛型和接口约束 13.8 实现多个具有相同方法名和签名的接口 13.9 用显式接口方法实现来增强编译时类型安全...

    CLR.via.C#.(中文第3版)(自制详细书签)

    13.4 关于调用接口方法的更多探讨 13.5 隐式和显式接口方法实现(幕后发生的事情) 13.6 泛型接口 13.7 泛型和接口约束 13.8 实现多个具有相同方法名和签名的接口 13.9 用显式接口方法实现来增强编译时类型安全性...

    CLR.via.C#.(中文第3版)(自制详细书签)Part3

    13.4 关于调用接口方法的更多探讨 13.5 隐式和显式接口方法实现(幕后发生的事情) 13.6 泛型接口 13.7 泛型和接口约束 13.8 实现多个具有相同方法名和签名的接口 13.9 用显式接口方法实现来增强编译时类型安全...

    c#积累总结

    `EventInfo`对象包含了关于事件的所有信息,如事件名称、事件处理方法的添加和移除方法等。 除了`partial`类和反射之外,C#还有很多其他重要知识点,比如: 1. **面向对象特性**:继承、封装、多态是C#的核心特性...

    java基础学习词汇

    在Java反射API中,可以动态地调用类的方法。 #### Iterator (迭代器) 迭代器是一个用于遍历集合的接口。Java中的迭代器允许逐个访问集合中的元素,而无需暴露集合的具体实现。 #### Legal (合法的) 虽然“legal...

    贴图命名工具wxq.zip 3dmax插件

    在大型项目中,尤其当涉及到多个纹理、漫反射、镜面反射、环境光遮蔽等贴图时,管理这些文件的名称和路径就显得尤为重要。如果贴图命名不规范,可能导致渲染出错或者在项目协作中引起混乱。"贴图命名工具wxq" 提供了...

    C语言常见问题集

    - 实现抽象数据类型的最佳方法之一是使用结构体和函数封装数据和操作。可以定义结构体来存储数据,并编写一系列函数来操纵这些数据。 5. **在C中是否有模拟继承等面向对象程序设计特性的好方法?** - C语言本身不...

    Udacity-Java-ProblemSets

    在这个目录中,你可能会找到课程的笔记、代码示例、测试用例、解决方案以及关于如何完成每个问题的指导。 在这个问题集中,你可能遇到以下Java知识点: 1. **基本语法**:包括声明变量、常量,理解数据类型(如...

Global site tag (gtag.js) - Google Analytics