- 0
- 0
- 约1.38万字
- 约 3页
- 2017-06-08 发布于河南
- 举报
JAVA重载copyProperties
JAVA重写copyProperties,使其支持Map类型
农网门户开发中心 高绪国
最近,项目组要用到一个功能,就是用BeanUtils.copyProperties复制一个Map里的属性值到另外一个对象。
BeanUtils和PropertyUtils类是许多开源框架中频繁使用的两个工具,它们都能实现将一个类中的属性拷贝到另一个类中,这个功能甚至是spring实现依赖注入的基础。研究一下apache的comon包中如何实现这个两个工具,可以发现它们都是使用java.lang.reflect和java.beans这两个包下的几个类来实现的。
但是BeanUtils.copyProperties只支持两个对象之间的复制,其原理:是利用反射读取到第一个对象(源类)的所有属性,然后对这些属性集合进行for循环,再在for循环里面判断这些属性是否有set方法,有则再对第二个对象(目标类)进行循环取出属性一一对比,相等则调用目标类的set方法得到源类的get方法得到的值。
改后主要就是两点:第一:源类(Map类型)的Key作为属性和目标类的属性对比,相等则取出此Key的Value赋给目标类(当然还是用目标类此属性的set方法)。注意:如果是通过http请求的getParameterMap()得到的Map,其值是一个数组,一般只需要取第0项就可以了。
BeanUtils.copyProperties方法的源码限于篇幅,就不贴在此处了,有兴趣的可以百度一下或到我博客上去查看。
扩展后的copyProperties方法,这里为了表示和BeanUtils有“亲缘关系”,就新建了同名类并用同名方法,只是多做了一些处理,使其支持int/Integer、Date和自定义对象。限于篇幅只贴了核心代码,详细的可以访问我的博客:
HYPERLINK /leadergg/archive/2008/12/11/3495586.aspx /leadergg/archive/2008/12/11/3495586.aspx
/** 实现将源类(Map类型)属性拷贝到目标类中
* @param Map map 源Map对象
* @param Object obj 目标对象
* @auther a href=mailto:gaoxuguo@Gao XuGuo/a
* 2009-11-30 13:11:29
*/
public static void copyProperties(Map map, Object obj) throws Exception {
// 获取目标类的属性信息
BeanInfo targetbean = Introspector.getBeanInfo(obj.getClass());
PropertyDescriptor[] propertyDescriptors = targetbean.getPropertyDescriptors();
// 对每个目标类的属性查找set方法,并进行处理
for (int i = 0; i propertyDescriptors.length; i++) {
PropertyDescriptor pro = propertyDescriptors[i];
Method wm = pro.getWriteMethod();
if (wm != null) {
Iterator ite = map.keySet().iterator();
while (ite.hasNext()) {
String key = (String) ite.next();
// 判断匹配
if (key.toLowerCase().equals(pro.getName().toLowerCase())) {
if (!Modifier.isPublic(wm.getDeclaringClass().getModifiers())) {
wm.setAccessible(true);
}
Object value = ((String[]) map.get(key))[0];
String pt = splitSp
您可能关注的文档
- 01模电基础.ppt
- .Net Framework .NET2.0 3.0 3.5 4.0区别 Net Framework各个版本区别.doc
- .Net下XML文档的读写操作.docx
- 098闻见近录 (宋)王巩 著.doc
- 15章中英文.doc
- 2008英语四级完型填空模拟训练1.doc
- 1972国际海上避碰规则.doc
- 2013成教专业英语复习题.doc
- 2011_初一生物_生物的恒定性.doc
- 2013版土力学教学大纲(土木工程专业).doc
- 全过程工程管理造价咨询工程监理项目服务方案投标方案(技术部分).doc
- 招标代理服务投标技术服务方案(技术方案).doc
- AI大模型与AIGC技术在公安领域的应用解决方案(99页 PPT).pptx
- 工业4.0智能制造数字工厂规划方案.pptx
- 树立社会主义核心价值观.docx
- 三年(2023-2025)中考历史真题分类汇编(全国)专题21 科技文化与社会生活(解析版).docx
- 2025年中考道德与法治真题完全解读(吉林卷).pdf
- 2025年中考道德与法治真题完全解读(安徽卷).pdf
- 三年(2023-2025)中考历史真题分类汇编(全国)专题14 人民解放战争(解析版).pdf
- 三年(2023-2025)广东中考历史真题分类汇编:专题03 中国近代史(八年级上册)(解析版).docx
最近下载
- B0205精密自动车床操作说明书.pdf VIP
- 山东省济南市历下区四年级(上)期末数学试卷.pdf VIP
- 统编人教版六年级语文上册全册课后习题答案.pdf VIP
- 苏州中学伟长试验部历年招生试题.docx VIP
- 2025湖北荆州市公安县事业单位急需紧缺人才引进86人笔试备考试题及答案解析.docx VIP
- 2024届四川省成都市金堂县中考联考历史试题含解析.doc VIP
- 丹佛斯磁悬浮压缩机轴承原理及控制.pdf VIP
- 2026人教版小学三年级下册英语期末综合试卷(4套含答案解析).pdf
- 山东省济南市历下区2023-2024学年四年级上学期语文期末考试试卷(含答案).pdf VIP
- 2025湖北荆州市公安县事业单位急需紧缺人才引进86人笔试备考题库及答案解析.docx VIP
原创力文档

文档评论(0)