atitit.java方法属性赋值and BeanUtils 1.6.1 .copyProperty的bug
atitit.java分配给属性值方法and BeanUtils 1.6.1 .copyProperty的bug
1. core.setProperty(o, "materialId", null); 1
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中成员变量名称集合的交集产生作用.(非常饶口啊)
正经常使使用方法非常easy,这里略掉.
相同,这种方法也支持对数组中单个元素,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的更多相关文章
- atitit.java给属性赋值方法总结and BeanUtils 1.6.1 .copyProperty的bug
atitit.java给属性赋值方法总结and BeanUtils 1.6.1 .copyProperty的bug 1. core.setProperty(o, "materialId&qu ...
- Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针
Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针 1.1. java方法引用(Method References) 与c#委托与脚本语言js ...
- properties文件属性值@Value注解为 java entity属性赋值
一.使用@Value为 java entity类中的非static属性赋值 举个栗子,一目了然 1.1 properties文件 1.2 servlet.xml 文件增加的配置: 1.2.1 serv ...
- properties文件属性值通过xml文件为 java entity属性赋值
一.通过xml配置文件进行赋值: 举个栗子,一目了然: 1.1 properties文件: 1.2 xml配置文件,将properties属性与java entity属性相关联:(这是一个新建的xml ...
- 浅谈Java之属性赋值的先后顺序
首先,什么是属性? 属性也叫作成员变量,是类的组成部分之一. 我们都知道Java一个类可以包含有: 属性,或者成员变量 构造器 方法,或者叫函数 代码块,或者叫程序段 内部类 那么结合这些,我们就有了 ...
- Jquery attr()方法 属性赋值和属性获取
jquery中用attr()方法来获取和设置元素属性,attr是attribute(属性)的缩写,在jQuery DOM操作中会经常用到attr(),attr()有4个表达式. 1. attr(属性名 ...
- 【小家Spring】Spring IoC是如何使用BeanWrapper和Java内省结合起来给Bean属性赋值的
#### 每篇一句 > 具备了技术深度,遇到问题可以快速定位并从根本上解决.有了技术深度之后,学习其它技术可以更快,再深入其它技术也就不会害怕 #### 相关阅读 [[小家Spring]聊聊Sp ...
- [原创]java WEB学习笔记98:Spring学习---Spring Bean配置及相关细节:如何在配置bean,Spring容器(BeanFactory,ApplicationContext),如何获取bean,属性赋值(属性注入,构造器注入),配置bean细节(字面值,包含特殊字符,引用bean,null值,集合属性list map propert),util 和p 命名空间
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Java循环一个对象的所有属性,并通过反射给这些属性赋值/取值
Java循环一个对象的所有属性,并通过反射给这些属性赋值/取值 说到循环遍历,最常见的遍历数组/列表.Map等.但是,在开发过程中,有时需要循环遍历一个对象的所有属性.遍历对象的属性该如何遍历呢?查了 ...
随机推荐
- [置顶] 64位Win2008_VS2012使用ODP.NET遭遇问题和解决办法
最近为使用Oracle11G数据库做个快速开发的小程序,使用64位Win2008+Vs2012环境,结果碰壁连环,幸好不算太笨,终于解决了,特记录一下. 测试环境: Oracle11g (11.2.0 ...
- Java学习JVM搞搞Jconsole呗
无意间翻到这条博客:http://www.blogjava.net/zhvfeng/archive/2010/08/04/327956.html 这里还有个讲解的:http://www.kafka01 ...
- C语言深度解剖读书笔记(6.函数的核心)
对于本节的函数内容其实就没什么难点了,但是对于函数这节又涉及到了顺序点的问题,我觉得可以还是忽略吧. 本节知识点: 1.函数中的顺序点:f(k,k++); 这样的问题大多跟编译器有关,不要去刻意追求 ...
- Android学习笔记(十三)——碎片(一)
碎片 碎片可看作第二种形式的活动,能够创建碎片来包括视图. 碎片总是嵌入在活动中,一般有两种常见形式: 1.碎片A和碎片B分别处于不同的活动中,当选择碎片A中的某一项时,触发碎片B启动: 2.碎片A和 ...
- PostgreSQL的备份与还原
导出: cmd,然后一直cd,到PostgreSQL的bin下面,用其pg_dump程序: pg_dump -h localhost -U ivms864013 ivms864013 > G:\ ...
- Qt移动版优化后台云服务、支持跨平台开发
http://mp.weixin.qq.com/mp/appmsg/show?__biz=MjM5MDE0Mjc4MA==&appmsgid=10000461&itemidx=2&am ...
- RobotFrameWork(十一)AutoItLibrary测试库在win7(64bit)下安装及简单使用
最近安装AutoItLibrary,发现在win7 x64下无法安装成功,后来经过定位,发现是3rdPartyTools\AutoIt目录下面AutoItX3.dll的问题.因为AutoItX3.dl ...
- Redis util
主要是字符串通配符匹配和数字与字符串互转的几个函数. // 通配符模式匹配 int stringmatchlen(const char* p, int plen, const char* s, int ...
- Android:通知栏的使用
非常久没有使用Android的通知功能了,今天把两年前的代码搬出来一看.发现非常多方法都废弃了,代码中各种删除线看的十分不爽.于是乎,打开Google,查看官方文档.学习最新的发送通知栏消息的方法. ...
- Android---OpenGL ES之添加动作
本文译自:http://developer.android.com/training/graphics/opengl/motion.html 在屏幕上绘制对象是OpenGL的最基本功能,你可以使用其他 ...