最近在研究struts框架的同时,顺便看了看beanutils开源项目,对BeanUtils的一些内容做了一些整理,与大家分享同时也帮助自己记忆。
主要涉及以下几点内容:
1.PropertyUtils的getProperties方法
2.如何创建动态bean对象
3.学会使用BeanUtils的copyProperties方法
好,那么我们先来看PropertiesUtils的getProperties方法
在PropertiesUtils获取属性的方法中提供了4种基本实现他们分别支持基本数据获取(简单式)、map数据获取(Map式)、数组内对象属性获取(索引式)、以及级联属性获取(嵌套式)。
但是由于getProperties本身对4中属性的获取方法都支持因此在此只列出getProperties的4种应用。
我们假设这样几个对象
Teacher teacher{String name,Student[] students,Address address,Map phone}
Students student{String name}
Address address{String lane, String no}
简单式:PropertiesUtils.getProperties(teacher,"name");
Map式:PropertiesUtils.getProperties(teacher,"phone(keyname)");
索引式:PropertiesUtils.getProperties(teacher,"students[index].name");
嵌套式:PropertiesUtils.getProperties(teacher,"address.lane");
其次,我们来看看如何创建动态的bean对象:
在beanutils包下动态bean主要分为2类,第一类是预定义的bean,还有一种是lazyload的bean。我们分别做介绍。
创建一个预定义bean的步骤如下:
1)构建DynaProperty: DynaProperty[] dp = new DynaProperty[]{
new DynaProperty("propertyName",String.class).....};
2)构建DynaClass: DynaClass newclass = new BasicDynaClass("beanName",null,dp);
3)构建DynaBean: DynaBean dbean = newclass.newInstance();
4)设置bean属性:dbean.set("propertyName",propertyValue);
创建一个lazyload的bean的步骤如下
1)实例化一个lazy load bean: DynaBean dbean = new LazyDynaBean();
2)设置bean属性: dbean.set("propertyName",propertyValue);
取值均在dbean内按照1中4种方式获取即可
最后我们来看看BeanUtils的copyProperties方法,这个也是大家讨论最多的。我把我的理解写出来与大家分享。如果有不正确的地方欢迎指正。
顾名思义,这是一个用于copy属性的方法。在BeanUtils中copy属性不仅会对同属性名且同类型的属性进行拷贝,并且会对同属性名,不同类型的属性进行转化。所以在copy的时候经常会出现类型不匹配的情况,当然apache对于有一些类型的转化做了默认的实现,举个简单的例子,如果一个String数组需要拷贝到String属性中去,apache做的默认实现是将String数组的地址做为一个字符串拷贝到String的属性中去。
那这些转化都是哪里做的呢,这就说到了这个方法的核心内容ConvertUtils工具类:下面介绍对于不同类型的拷贝,如何来自己做实现。
具体步骤如下:
1)创建一个用于处理的Convert自定义类,我们不妨定义一个类叫做MyConverter,这个类要求实现Converter接口,同时实现它的convert方法,该方法的返回值,就是你所希望得到的被设置到目标对象中的内容。
2)使用ConvertUtils.register(new MyConverter(),String.class);这里有几点需要说明,register方法会对原有apache的默认实现做覆盖,所以一般只对特殊类型做注册,另外方法的第2个参数是一个class类型,该类型是需要转成的标的类型,也就是说需要转成String类型的数据才会执行MyConverter。而之前在1)中重写的convert方法中有一个Class参数则是源数据的类型。这里需要注意的。
这样一来,copy就可以顺利的执行了。同样的你可能会想到有了注册方法是否会有unregister方法呢,答案是肯定的,他支持解开单个注册以及解开全部的注册。在struts1的框架的初始化过程中,就对所有的copy标的类型,做了解注册和自定义的实现。
希望以上内容能够对大家有所帮助,如有错误不吝指正。
分享到:
相关推荐
Apache Commons BeanUtils是Apache软件基金会的一个开源项目,它提供了一组实用工具类,用于简化JavaBean对象的操作。这个库的核心是`org.apache.commons.beanutils`包,其中包含了大量的辅助方法,使得开发者可以...
使用这个版本,开发者可以获得稳定的性能和兼容性,同时享受Apache开源许可证带来的自由使用和分发的权利。 在实际开发中,`BeanUtils`通常与其他Apache Commons库一起使用,如Collections、Lang、IO等,共同构建...
commons-beanutils, Apache Commons Beanutils的镜像 Apache Commons BeanUtils Apache Commons BeanUtils提供了一个 easy-to-use,但它围绕反射。文档更多信息可以在公共BeanUtils主页上找到。 可以浏览 JavaDoc插
标题"commons-beanutils-1.9.2下载"指的是Apache Commons BeanUtils库的1.9.2版本,这是一个开源的、稳定且广泛使用的版本。下载这个库的目的是为了在项目中引入它的功能,以便于处理Java对象的属性操作。 Apache ...
Apache开源工具是软件开发领域中极其重要的一部分,它为开发者提供了丰富且强大的工具集,极大地提高了开发效率和软件质量。...共享和使用Apache开源工具是开源精神的体现,也是软件开发者社区不断进步的关键因素之一。
Apache Commons BeanUtils是Java开发中的一个实用工具库,主要用于处理JavaBeans对象,简化对JavaBean属性的操作。这个库提供了一套方便的API,使得开发者可以通过简单的API调用来获取、设置JavaBean的属性,甚至...
Apache Commons BeanUtils是Apache软件基金会开发的一个开源项目,它是Apache Commons项目的一部分,专注于简化JavaBean的属性操作。BeanUtils库的核心思想是通过反射机制,为开发者提供了一种简洁的方式来访问和...
BeanUtils库是Apache软件基金会开发的一个开源项目,其核心功能在于提供了一系列便捷的方法,帮助开发者更高效地操作JavaBeans对象。本篇文章将深入探讨BeanUtils包的使用、功能及其在网络框架中的应用。 Apache ...
Apache Commons BeanUtils是Apache软件基金会的一个开源项目,它提供了一套便捷的JavaBean操作API,使得开发者可以方便地进行JavaBean属性的读写操作,无需手动编写getter和setter方法。BeanUtils的核心功能包括: ...
Apache Commons BeanUtils Core是一个用于简化JavaBeans操作的开源库。它提供了一系列静态方法,使得开发者可以方便地对Java对象进行属性的读取、设置、复制,甚至转换等操作。BeanUtils Core的主要目标是减少与...
这两个组件都是Apache软件基金会的开源项目,广泛应用于各种Java应用程序。 `commons-beanutils-1.9.4.zip`是一个包含Apache Commons BeanUtils 1.9.4版本的压缩包。这个版本包含了以下几个关键文件: 1. `commons...
Commons BeanUtils是Apache软件基金会开发的一个Java开源项目,它位于Apache Commons组件库中,主要用于简化JavaBean对象的操作。这个库提供了许多便利的方法,使得开发者能够更便捷地处理JavaBean属性,而无需直接...
Apache Commons BeanUtils是Apache软件基金会提供的一个开源项目,它提供了一组方便的工具类,用于简化JavaBean操作。BeanUtils库的核心功能包括:属性的动态读写、对象间的属性复制、类型转换等。在给定的“commons...
这两个库都是Apache软件基金会的一部分,属于开源项目,广泛应用于各种Java应用程序。 Apache Commons BeanUtils库是针对Java Beans的一个实用工具集。Java Beans是一种遵循特定设计模式的Java类,通常用于封装数据...
Commons BeanUtils库是Apache软件基金会开发的一个开源项目,主要用于简化JavaBean操作。在Java编程中,BeanUtils库提供了一系列方便实用的方法,使得开发者能够更加高效地处理Java对象,特别是JavaBean对象。标题中...
1. **Apache Commons Lang**: 这个模块提供了一系列高级的Java语言功能,包括字符串操作(如格式化、比较、拼写检查)、数组操作、日期和时间处理、反射工具等。例如,StringUtils类提供了大量的静态方法,可以方便...
Apache Commons BeanUtils是Java开发中广泛使用的开源工具库,它简化了JavaBean对象的操作,提供了大量的便捷方法,使得开发者能够更加方便地处理属性的读取和设置,以及对象之间的复制。在这个标题为"commons-...
### Java开源项目Hibernate包作用详解 #### 概述 Hibernate是一个强大的对象关系映射(Object-Relational Mapping,简称ORM)框架,它极大地简化了Java应用程序与数据库交互的过程。通过Hibernate,开发者能够更加...
Apache Commons BeanUtils是Apache软件基金会开发的一个开源项目,它是Java编程中的一个实用工具库,主要提供了方便地操作JavaBeans属性的功能。本文将深入探讨其中的核心模块——Commons BeanUtils Core 1.8.0版本...
这个开源项目是Apache软件基金会下的 Commons 项目之一,其源码位于"commons-beanutils-1.8.3-src"中。 **1. JavaBean与BeanUtils** JavaBean是一种遵循特定规范的Java类,通常用于封装数据,具有getter和setter...