atitit.java给属性赋值方法总结and BeanUtils 1.6.1 .copyProperty的bug

1. core.setProperty(o, "materialId", null); 1

2. Java Reflection (JAVA反射) 1

3. 反射的用处 2

4. Java类反射中所必须的类: 2

BeanUtils.copyProperty 2

5. BeanUtils.setProperty 2

6. 参考 4

1. core.setProperty(o, "materialId", null);

BeanUtils1.6.1  copyProperty 韩式setProperty都有个bug...

Yaosi prpty shg Integer...,,sett null的时候儿不起效率,不个它变化为0..def convertyeu prob l ....

Yanen reg custm convert l .zeush pa effice zaid code l ...zihao gazi write nwe d le ...

2. Java Reflection (JAVA反射)

Reflection 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性。例如,使用它能获得 Java 类中各成员的名称并显示出来。

Java 的这一能力在实际应用中也许用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性。例如,Pascal、C 或者 C++ 中就没有办法在程序中获得函数定义相关的信息。

反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。这一概念的提 出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。其中 LEAD/LEAD++ 、OpenC++ 、MetaXa和OpenJava等就是基于反射机制的语言。最近,反射机制也被应用到了视窗系统、操作系统和文件系统中。

反射本身并不 是一个新概念,尽管计算机科学赋予了反射概念新的含义。在计算机科学领域,反射是指一类应用,它们能够自描述和自控制。也就是说,这类应用通过采用某种机 制来实现对自己行为的描述(self-representation)和监测(examination),并能根据自身行为的状态和结果,调整或修改应用 所描述行为的状态和相关的语义

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

3. 反射的用处

JavaBean 是 reflection 的实际应用之一,它能让一些工具可视化的操作软件组件。这些工具通过 reflection 动态的载入并取得 Java 组件(类) 的属性。

系统的灵活性、可扩展性大都都是通过反射等方式来加载外部插件,使得系统与插件解耦的同时,增加了功能

4. Java类反射中所必须的类:

Java的类反射所需要的类并不多,它们分别是:Field、Constructor、Method、Class、Object,下面我将对这些类做一个简单的说明。

Constructor类:提供关于类的单个构造方法的信息以及对它的访问权限。这个类和Field类不同,Field类封装了反射类的属性,而Constructor类则封装了反射类的构造方法。

Field 类的setAccessible方法,它是用来设置是否有权限访问反射类中的私有属性的,只有设置为true时才可以访问,默认为false。另外 Field类还有set(Object AttributeName,Object value)方法,可以改变指定属性的值。

BeanUtils.copyProperty

5. BeanUtils.setProperty

BeanUtils.setProperty(java.lang.Object bean,java.lang.String name,java.lang.Object value)

这 个方法让我郁闷了一会,因为它提供的功能与上面说的BeanUtils.copyProperty(java.lang.Object bean,java.lang.String name,java.lang.Object value)完全一致,apache的hero们没理由为同一功能提供两种展示方法啊,后来我看了 apache.commons.beanutils.BeanUtilsBean中的javadoc,才明白了一点点.如果我们只是为bean的属性赋值 的话,使用copyProperty()就可以了;而setProperty()方法是实现BeanUtils.populate()(后面会说到)机制 的基础,也就是说如果我们需要自定义实现populate()方法,那么我们可以override setProperty()方法.
所以,做为一般的日常使用,setProperty()方法是不推荐使用的.

BeanUtils.populate(java.lang.Object bean, java.util.Map properties)

使 用一个map为bean赋值,该map中的key的名称与bean中的成员变量名称相对应.注意:只有在key和成员变量名称完全对应的时 候,populate机制才发生作用;但是在数量上没有任何要求,如map中的key如果是成员变量名称的子集,那么成员变量中有的而map中不包含的项 将会保留默认值;同样,如果成员变量是map中key的子集,那么多余的key不会对populate的结果产生任何影响.恩,结果就是populate 只针对map中key名称集合与bean中成员变量名称集合的交集产生作用.(很饶口啊)
正常用法很简单,这里略掉.
同样,这个方法也支持对数组中单个元素,map中单个元素和嵌套属性的赋值,具体做法和copyProperty()方法类似,具体如下:
values.put("words[1]","U");
values.put("map(home)","remote");
values.put("sample.display",new Double(5.0));
注意:apache的javadoc中,明确指明这个方法是为解析http请求参数特别定义和使用的,在正常的使用中不推荐使用.他们推荐使用BeanUtils.copyProperties()方法.(struts中的FormBean应该是用这个方法装配的)

public static void setProperty(Object obj,String properName,Object val)  {

try {

//BeanUtils.copyProperty(obj, properName, val);

Field fld=obj.getClass().getDeclaredField(properName);

fld.setAccessible(true);

fld.set(obj, val);

//BeanUtils.setProperty

} catch (IllegalAccessException e) {

//  attilax 老哇的爪子 8:23:56 PM   Jul 19, 2014

core.warn(e);

} catch (SecurityException e) {

//  attilax 老哇的爪子 11:15:33 PM   Jul 19, 2014

e.printStackTrace();

} catch (NoSuchFieldException e) {

//  attilax 老哇的爪子 11:15:33 PM   Jul 19, 2014

e.printStackTrace();

}

}

6. 参考

BeanUtils取得对象属性值格式 - 综合编程 - 次元立方网 - 电脑知识与技术互动交流平台.htm (可以自己定义converter,只要实现Converter接口或者继承AbstractConverter类)

atitit.java给属性赋值方法总结and BeanUtils 1.6.1 .copyProperty的bug相关推荐

  1. java 编写方法和属性,Java类属性及方法的定义

    文章导读 [在定义类时,经常需要抽象出它的属性和方法,并定义在类的主体中.本文探讨Java类属性及方法的定义和使用.通过本文的学习,你将了解如何在Java类中定义属性及方法.属性值的设置和获取.] 本 ...

  2. java中数组赋值方法

    Java中数组赋值方法,以及为什么不能使用a = b //这里定义两个长度相同的数组,其中数组二为空 int[] arr1 = new int[]{1,2,3,4,5,6,0,0,0,0}; int[ ...

  3. Java给属性赋值的先后顺序

    在Java中,有多种给属性赋值的方式,本文讨论下赋值的先后顺序 共有五种赋值方式: 默认初始化 显示初始化 代码块赋值 构造器赋值 通过对象调用属性赋值 赋值顺序为:1->2 / 3->4 ...

  4. 属性赋值方法的赋值顺序

    一.对属性赋值的方法 默认初始化 显示初始化 构造器初始化 通过"对象.属性"或"对象.方法"进行赋值 代码块中进行赋值 二.属性赋值的先后顺序 提前声明!能够 ...

  5. 获取java 私有属性或 方法

    FileInputStream in = (FileInputStream) file.getInputStream();String csvPath = "";Class< ...

  6. vue.js html 属性赋值,vue.js input框之间赋值方法

    vue.js input框之间赋值方法 2019-01-07 编程之家 https://www.jb51.cc 编程之家收集整理的这篇文章主要介绍了vue.js input框之间赋值方法,编程之家小编 ...

  7. 【Java2】一维数组,家庭收支界面,/属性和方法,方法重载,变量分类,可变参数,包

    文章目录 1.一维数组:int[ ] a = { } 1.1 数组的内存分析(静态):数组名=首地址 1.2 数组的内存分析(动态):元素默认值 1.3 数组相关算法: 1.3.1 找最值:array ...

  8. vue.js表格赋值_vue.js input框之间赋值方法

    如下所示: demo.html Index Page 测试 {{ result1 }} 测试 {{ result2 }} demo.js new Vue({ el: "#demo" ...

  9. Android NDK学习笔记3:JNI访问Java属性、方法

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/119209444 本文出自[赵彦军的博客] 文章目录 Java 类型和JNI符号对比 ...

  10. java类向拦截器传值_MyBatis拦截器:给参数对象属性赋值的实例

    该拦截器的作用:在进行增加.修改等操作时,给数据模型的一些通用操作属性(如:创建人.创建时间.修改人.修改时间等)自动赋值. 该实现是在dao层拦截,即存入db前最后一层.后经分析,不是很合理,改为在 ...

最新文章

  1. [20160608]自治事务引起死锁.txt
  2. 【STM32】中断相关函数和类型
  3. linux中top性能分析工具中的TIME+
  4. 【栈】【字符】匹配(jzoj 1612)
  5. easyexcel安全扫描报php,easyExcel使用以及踩过的坑
  6. 远程出发jenkins jobs
  7. Atitit 企业文化建设 职称体系建设 之道 attilax著 1. 职称 1 1.1. 职称级别 prc poc 设正高级、副高级、中级、助理级 1 2. Uke职称级别 资深 高级
  8. 对js运算符“||”和“”的总结
  9. mysql group_concat拼接字符串长度
  10. WIFI后台数据一文解释通
  11. [HNOI 2008] 神奇的国度 kingdom
  12. Power BI项目之某公司内部数据分析
  13. 基于2D-3D直线对应关系的单目摄像机定位
  14. 聚划算火拼如何参团 聚划算火拼效果怎么样
  15. 洛谷P1162 填涂颜色(Python搜索)
  16. QT项目练习--砍多多校园二手交易平台(C++)
  17. python打包exe之pyinstaller
  18. Python 实现学生管理系统(面向对象版)
  19. 中国大学生计算机博弈大赛竞赛经验
  20. 线程间的五种通信方式

热门文章

  1. Android Realm(数据库)
  2. topcoder srm 445 div1
  3. Unix/Linux环境C编程新手教程(40) 初识文件操作
  4. Java eclipse: errors exist in required project(s)
  5. PHP学习笔记 第六讲 PHP数组的创建修改应用
  6. Percona5.6.15线程池压力测试
  7. 利用域策略设置域用户IE主页设置
  8. tips of MIPS
  9. 容斥原理模板(二进制表示)
  10. OpenResty之 lua_shared_dict 指令