最近在研究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标的类型,做了解注册和自定义的实现。
希望以上内容能够对大家有所帮助,如有错误不吝指正。
分享到:
相关推荐
commons-beanutils, Apache Commons Beanutils的镜像 Apache Commons BeanUtils Apache Commons BeanUtils提供了一个 easy-to-use,但它围绕反射。文档更多信息可以在公共BeanUtils主页上找到。 可以浏览 JavaDoc插
commons-beanutil开源库是apache组织的一个基础的开源库。为apache中很多类提供工具方法。学习它是学习其它开源库实现的基础。 Commons-beanutil中包括大量和JavaBean操作有关的工具方法,使用它能够轻松利用Java...
apache提供了一套开源的api BeanUtils组件,方便对javabean的操作。
commons-beanutils-1.8.3。commons-beanutils是Apache开源组织提供的用于操作JAVA BEAN的工具包。使用commons-beanutils,我们可以很方便的对bean对象的属性进行操作。
org.apache.commons的jar包,Apache Commons包含了很多开源的工具。 包括commons-beanutils-1.8.0-bin、commons-betwixt-0.8、commons-cli-1.1、commons-codec-1.3、commons-collections-3.2.1-bin、commons-...
commons-beanutils是Apache开源组织提供的用于操作JAVA BEAN的工具包。使用commons-beanutils,我们可以很方便的对bean对象的属性进行操作
commons-beanutils.jar 免费下载 commons-beanutils 是 Apache 开源组织提供的用于操作 JAVA BEAN 的工具包。 使用 commons-beanutils,我们可以很方便的对 bean 对象的属性进行操作。
commons-beanutils是Apache开源组织提供的用于操作JAVA BEAN的工具包。使用commons-beanutils,我们可以很方便的对bean对象的属性进行操作。
1,Apache.commons 1.1,beanutils propertyUtils类副本与反射副本使用及效率比较。 1.2,收藏CollectionUtils从一个列表中查找符合一定条件的对象。 2,太阳 2.1,发送邮件javax.mail完成邮件的发送和接收。 3,...
commons-beanutils.jar 免费下载 commons-beanutils 是 Apache 开源组织提供的用于操作 JAVA BEAN 的工具包。 使用 commons-beanutils,我们可以很方便的对 bean 对象的属性进行操作。
· jaf-1_1_1.zip · hibernate-validator-5.0.0.CR2-dist.zip · guice-1.0-src.zip · guice-1.0.zip · displaytag-1.2-bin.zip · displaytag-1.2-src.zip · cewolf-1.1.4.zip · cewolf-1.0-...
Bean Query 复用Apache Commons BeanUtils, Apache Commons Collections和Java Hamcrest 来简化对Bean(集合)的排序,过滤和转换。 文档 阅读 使用说明来学习怎么使用 BeanQueryExample.java用Junit...
1.commons-beanutils.jar:提供对Java反射和自省API的包装,主要提供了对于 JavaBean进行各种操作。提供了对于JavaBean进行各种操作,克隆对象,属性等等. 2.commons-digester.jar:方便地将XML文档所定义的元素转化为...
程序中对javabean的操作很频繁, 所以apache提供了一套开源的api,方便对javabean的操作!即BeanUtils组件
Commons项目()的Logging和Beanutils软件包。 这些软件包的许可条款位于此目录中名为“ LICENSE.apache20”的文件中。 该软件使用Google Guava库()。 这些软件包的许可条款位于此目录中名为“ LICENSE.apache20”...
commons-beanutils.jar Apache Commons包中的一个,包含了一些Bean工具类类。必须使用的jar包。 commons-collections.jar Apache Commons包中的一个,包含了一些Apache开发的集合类,功能比java.util.*强大 commons...
-Apache Commons BeanUtils为反射和自省提供了一个易于使用但灵活的包装器。 最流行HTML,CSS和JavaScript框架,用于在网络上开发响应式,移动优先项目。 网站的符号字体。 -JavaScript库。 大家都知
Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动。 包含的组件有BeanUtils、Codec、Collections、Lang、IO、FileUpLoad等等。本文档 帮助Java开发者学习相关内容
commons-beanutils.jar 提供对java 反射和自省API的包装 commons-fileupload.jar 文件上传 commons-io.jar 输入输出,支持文件上传 commons-logging.jar 用于通用日志处理 commons-validator.jar 提供了一个简单的,...