Java反射 - 简单的给Bean赋值和取值
由于项目的实际需要,所以利用java反射原理写了一个简单给bean赋值和取值通用的类,在此记录下方便自己日后用到,也为需要的兄弟提供个参考例子。
工具类BeanRefUtil:
- package com.test;
- import java.lang.reflect.Field;
- import java.lang.reflect.Method;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.Locale;
- import java.util.Map;
- /**
- * java bean 反射的方法
- */
- public class BeanRefUtil {
- /**
- * 取Bean的属性和值对应关系的MAP
- * @param bean
- * @return Map
- */
- public static Map<String, String> getFieldValueMap(Object bean) {
- Class<?> cls = bean.getClass();
- Map<String, String> valueMap = new HashMap<String, String>();
- // 取出bean里的所有方法
- Method[] methods = cls.getDeclaredMethods();
- Field[] fields = cls.getDeclaredFields();
- for (Field field : fields) {
- try {
- String fieldType = field.getType().getSimpleName();
- String fieldGetName = parGetName(field.getName());
- if (!checkGetMet(methods, fieldGetName)) {
- continue;
- }
- Method fieldGetMet = cls
- .getMethod(fieldGetName, new Class[] {});
- Object fieldVal = fieldGetMet.invoke(bean, new Object[] {});
- String result = null;
- if ("Date".equals(fieldType)) {
- result = fmtDate((Date) fieldVal);
- } else {
- if (null != fieldVal) {
- result = String.valueOf(fieldVal);
- }
- }
- valueMap.put(field.getName(), result);
- } catch (Exception e) {
- continue;
- }
- }
- return valueMap;
- }
- /**
- * set属性的值到Bean
- * @param bean
- * @param valMap
- */
- public static void setFieldValue(Object bean, Map<String, String> valMap) {
- Class<?> cls = bean.getClass();
- // 取出bean里的所有方法
- Method[] methods = cls.getDeclaredMethods();
- Field[] fields = cls.getDeclaredFields();
- for (Field field : fields) {
- try {
- String fieldSetName = parSetName(field.getName());
- if (!checkSetMet(methods, fieldSetName)) {
- continue;
- }
- Method fieldSetMet = cls.getMethod(fieldSetName, field
- .getType());
- String value = valMap.get(field.getName());
- if (null != value && !"".equals(value)) {
- String fieldType = field.getType().getSimpleName();
- if ("String".equals(fieldType)) {
- fieldSetMet.invoke(bean, value);
- } else if ("Date".equals(fieldType)) {
- Date temp = parseDate(value);
- fieldSetMet.invoke(bean, temp);
- } else if ("Integer".equals(fieldType)
- || "int".equals(fieldType)) {
- Integer intval = Integer.parseInt(value);
- fieldSetMet.invoke(bean, intval);
- } else if ("Long".equalsIgnoreCase(fieldType)) {
- Long temp = Long.parseLong(value);
- fieldSetMet.invoke(bean, temp);
- } else if ("Double".equalsIgnoreCase(fieldType)) {
- Double temp = Double.parseDouble(value);
- fieldSetMet.invoke(bean, temp);
- } else if ("Boolean".equalsIgnoreCase(fieldType)) {
- Boolean temp = Boolean.parseBoolean(value);
- fieldSetMet.invoke(bean, temp);
- } else {
- System.out.println("not supper type" + fieldType);
- }
- }
- } catch (Exception e) {
- continue;
- }
- }
- }
- /**
- * 格式化string为Date
- * @param datestr
- * @return date
- */
- public static Date parseDate(String datestr) {
- if (null == datestr || "".equals(datestr)) {
- return null;
- }
- try {
- String fmtstr = null;
- if (datestr.indexOf(':') > 0) {
- fmtstr = "yyyy-MM-dd HH:mm:ss";
- } else {
- fmtstr = "yyyy-MM-dd";
- }
- SimpleDateFormat sdf = new SimpleDateFormat(fmtstr, Locale.UK);
- return sdf.parse(datestr);
- } catch (Exception e) {
- return null;
- }
- }
- /**
- * 日期转化为String
- * @param date
- * @return date string
- */
- public static String fmtDate(Date date) {
- if (null == date) {
- return null;
- }
- try {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",
- Locale.US);
- return sdf.format(date);
- } catch (Exception e) {
- return null;
- }
- }
- /**
- * 判断是否存在某属性的 set方法
- * @param methods
- * @param fieldSetMet
- * @return boolean
- */
- public static boolean checkSetMet(Method[] methods, String fieldSetMet) {
- for (Method met : methods) {
- if (fieldSetMet.equals(met.getName())) {
- return true;
- }
- }
- return false;
- }
- /**
- * 判断是否存在某属性的 get方法
- * @param methods
- * @param fieldGetMet
- * @return boolean
- */
- public static boolean checkGetMet(Method[] methods, String fieldGetMet) {
- for (Method met : methods) {
- if (fieldGetMet.equals(met.getName())) {
- return true;
- }
- }
- return false;
- }
- /**
- * 拼接某属性的 get方法
- * @param fieldName
- * @return String
- */
- public static String parGetName(String fieldName) {
- if (null == fieldName || "".equals(fieldName)) {
- return null;
- }
- return "get" + fieldName.substring(0, 1).toUpperCase()
- + fieldName.substring(1);
- }
- /**
- * 拼接在某属性的 set方法
- * @param fieldName
- * @return String
- */
- public static String parSetName(String fieldName) {
- if (null == fieldName || "".equals(fieldName)) {
- return null;
- }
- return "set" + fieldName.substring(0, 1).toUpperCase()
- + fieldName.substring(1);
- }
- }
Java反射 - 简单的给Bean赋值和取值的更多相关文章
- js实现hashtable的赋值、取值、遍历
哈希表(Hashtable)这个概率应该是#c里面的概念,用来赋值.取值.遍历.排序操作提高效率.想起这个东西其实使我们以前经常遇到这样的面试题,一个很大的数组可能有100000个,如何快速知道它里面 ...
- 关于ligerform中select与text的赋值与取值
如有下ligerform表单: var formData = [ { display: "区域", name: "QYYJ", newline: true, l ...
- Jquery实现数据双向绑定(赋值和取值),类似AngularJS
<!DOCTYPE html> <html> <head> <meta name="viewport" content="wid ...
- 实用ExtJS教程100例-011:ExtJS Form 使用JSON数据赋值和取值
上一节中我们演示了ExtJS Form的异步加载和提交数据,本节中我们将演示如何使用JSON数据为ExtJS Form中的字段赋值和取值. 系列ExtJS教程持续更新中,点击查看>>最新E ...
- jquery input 赋值和取值
记录一下: 在写一个input赋值,二话不说就直接利用了$('#xx').val()来进行取值和赋值,取值ok,赋值后利用alert显示正确,但是在html上并没有正确的显示出来,后来改为使用如下代码 ...
- datetimebox赋值或取值
datetimebox赋值或取值 $('#j_dateStart').datebox('setValue', ""); //赋予空值 $("#j_dateStart&qu ...
- 通过编写串口助手工具学习MFC过程——(十)UpdateData()用法和编辑框的赋值、取值
通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...
- java 反射原理写了一个赋值和取值通用类
首先了解一下反射的原理,什么是反射?所谓的反射就是指java 语言在运行时拥有一项自观的能力,反射能使你得到装载到 jvm 中的类的内部信息,它不需要你在编码的时候就知道所需类的内部信息,允许程序执行 ...
- java反射获取和设置实体类的属性值 递归所有父类
最近做一个通用数据操作接口,需要动态获取和设置实体类的属性值,为了通用实体做了多重继承,开始网上找到代码都不支持父类操作,只能自己搞一个工具类了,此工具类可以设置和获取所有父类属性,代码贴下面拿走不谢 ...
随机推荐
- 如何学php少走弯路
我是自学php,而且是非计算机专业,算半路出家的.(工作了一段时间又自学编程) 1.一本好书至关重要.如果这本书的知识非常深入,那么还是不要看了.对初学者来说只能是打击.因为很多东西都看不懂.一本知识 ...
- Python模块 实现过渡性模块重载
本文是在阅读Python 学习手册后 感觉比较不错的一个实现模块重载的一个模块,该模块可以实现对已经加载在运行程序中的模块实现重新加载,并且该模块可以递归的实现对要重新加载的模块内所引用的其它模块的 ...
- 通过Servlet设置文件下载
文件下载 1.获取要下载的文件的绝对路径 但是使用getServletContext().getRealPath()方法在不同的服务器上所获得的实现是不一样的 因为项目被打包入.war文件以后就失去了 ...
- 20155117王震宇 2016-2017-2 《Java程序设计》第七周学习总结
教材学习内容总结 时间度量 格林尼治标准时间(GMT):现在GMT已不作为标准时间使用. 世界时(UT):借助观测远方星体跨过子午线而得,受地球自转速度影响. 国际原子时(TAI):铯原子辐射振动幅度 ...
- 来自官方的一些dbt 最佳实践
限制对原始数据的依赖性 您的项目将取决于存储在数据库中的原始数据.我们建议制作所谓的“基本模型”,以最大限度地减少对原始数据表的依赖性.在此约定中,基本模型可以具有以下职责: 仅选择与当前分析相关的字 ...
- 如何构建 MVC&AJax&JSon示例
背景: 博客中将构建一个小示例,用于演示在ASP.NET MVC4项目中,如何使用JQuery Ajax. 直接查看JSon部分 步骤: 1,添加控制器(HomeController)和动作方法(In ...
- RequireJS 学习
几个学习点: 配置模块路径 定义模块 配置不支持 AMD jsonp 服务 text 插件 css 插件
- ORA-32004 的错误处理
启动数据库时,收到了ORA-32004 的错误,错误多是一些过时且在当前版本中不在使用的参数,如果碰到类似的错误,只需要将其 reset即可. SQL> startup;ORA-32004: o ...
- jQuery插件之ajaxFileUpload[转载]
ajaxFileUpload.js 很多同名的,因为做出来一个很容易. 我用的是这个:https://github.com/carlcarl/AjaxFileUpload 下载地址在这里:http:/ ...
- valgrind的使用--检测内存
valgrind主要检测内存的使用情况,检测有否内存泄露等. 比如:test_va2.cpp #include<iostream> using namespace std; int mai ...