`

Commons BeanUtils包说明

    博客分类:
  • Java
阅读更多

 

commons项目主页:http://commons.apache.org/

 

Commons BeanUtils : http://commons.apache.org/components.html

 

BeanUtils就是其中的一个,用于处理JavaBeans。它利用Java的反射机制,从动态的生成对bean的getter和setter 的调用代码,到模拟创建一个动态的bean,等等。这个包看似简单,却是很多开源项目的基石:如在著名的Struts和Spring Framework中,我们都能找到BeanUtils的影子。大家猜猜看,有哪位名人是BeanUtils的作者之一?没错,就是Struts的创始人 Craig McClanahan。

BeanUtils最核心的好处在于:我们在编码时,并不需要知道我们处理的JavaBeans具体是什么类型,有哪些属性,这些信息是可以动态获 取的,甚至我们都可以不必去关心事实上是否存在这样一个具体的JavaBean类。我们只需要知道有一个JavaBean的实例,我们需要从中取得某个属 性,设定某个属性的值,或者仅仅是需要一个属性表。要做到这些,依靠Sun提供的JavaBean规范似乎找不到一个很直接的方式,除非硬编码,将 getXxxx()和setXxxx()直接写进我们的程序。但是这样就大大增加了代码的复杂度、耦合性和维护成本。还好Commons BeanUtils对这个问题提供了一种优雅的解决方案。

 

 

     1.PropertyUtils


  它支持三种类型的属性值-Simple,Indexed,Mapped
  Simple属性访问方法
  PropertyUtils.getSimpleProperty(Object bean, String name)
  PropertyUtils.setSimpleProperty(Object bean, String name, Object value)


  实现代码:
   Employee employee = ...;
   String firstName = (String)
   PropertyUtils.getSimpleProperty(employee, "firstName");
   String lastName = (String)
   PropertyUtils.getSimpleProperty(employee, "lastName");
   ... manipulate the values ...
   PropertyUtils.setSimpleProperty(employee, "firstName", firstName);
   PropertyUtils.setSimpleProperty(employee, "lastName", lastName);


  Indexed属性访问方法
  PropertyUtils.getIndexedProperty(Object bean, String name)
  PropertyUtils.getIndexedProperty(Object bean, String name, int index)
  PropertyUtils.setIndexedProperty(Object bean, String name, Object value)
  PropertyUtils.setIndexedProperty(Object bean, String name, int index, Object value)


  实现代码:
  Employee employee = ...;
   int index = ...;
   String name = "subordinate[" + index + "]";
   Employee subordinate = (Employee)
   PropertyUtils.getIndexedProperty(employee, name);//根据value取得属性
   Employee employee = ...;
   int index = ...;
   Employee subordinate = (Employee)
   PropertyUtils.getIndexedProperty(employee, "subordinate", index);//根据索引
  值取的属性值


  Mapped属性访问方法
  PropertyUtils.getMappedProperty(Object bean, String name)
  PropertyUtils.getMappedProperty(Object bean, String name, String key)
  PropertyUtils.setMappedProperty(Object bean, String name, Object value)
  PropertyUtils.setMappedProperty(Object bean, String name, String key, Object value)
  实现代码:
  Employee employee = ...;
   Address address = ...;
   PropertyUtils.setMappedProperty(employee, "address(home)", address);//根据数组
  //内的值来去的相应的属性值
   Employee employee = ...;
   Address address = ...;
   PropertyUtils.setMappedProperty(employee, "address", "home", address);


  Nested属性访问方法//Nested的意思是参数中包含组件
  PropertyUtils.getNestedProperty(Object bean, String name)
  PropertyUtils.setNestedProperty(Object bean, String name, Object value)
  实现代码:
  String city = (String) PropertyUtils.getNestedProperty(employee,
  "address(home).city");


  2.BeanUtils.DynaBean and BeanUtils.DynaClass 接口介绍
  DynaBean必须有一个bean来实现这个接口,DynaClass必有一个bean的属性集来实现


  BasicDynaBean and BasicDynaClass - 基本的 Dynamic 类型
  基本的API:
  BasicDynaClass(java.lang.String name, java.lang.Class dynaBeanClass, DynaProperty[] properties)
  BasicDynaBean(DynaClass dynaClass)
  我们定义一下基本的代码:
  //定义动态属性集
  DynaProperty[] props = new DynaProperty[]{
   new DynaProperty("address", java.util.Map.class),
   new DynaProperty("subordinate", mypackage.Employee[].class),
   new DynaProperty("firstName", String.class),
   new DynaProperty("lastName", String.class)
   };
  //创建动态类来设定动态属性值
   BasicDynaClass dynaClass = new BasicDynaClass("employee", null, props);
  DynaBean employee = dynaClass.newInstance();
   employee.set("address", new HashMap());
   employee.set("subordinate", new mypackage.Employee[0]);
   employee.set("firstName", "Fred");
   employee.set("lastName", "Flintstone");


  ResultSetDynaClass (Wraps ResultSet in DynaBeans) - 使用 ResultSet 的
  Dynamic JavaBean
  API:
  ResultSetDynaClass(java.sql.ResultSet resultSet)
  ResultSetDynaClass(java.sql.ResultSet resultSet, boolean lowerCase)
  Connection conn = ...;
   Statement stmt = conn.createStatement();
   ResultSet rs = stmt.executeQuery
   ("select account_id, name from customers");
   Iterator rows = (new ResultSetDynaClass(rs)).iterator();
   while (rows.hasNext()) {
  //利用动态bean进行输出
   DynaBean row = (DynaBean) rows.next();
   System.out.println("Account number is " +
   row.get("account_id") +
   " and name is " + row.get("name"));
   }
   rs.close();
   stmt.close();


  RowSetDynaClass (Disconnected ResultSet as DynaBeans) - 使用 RowSet 的 Dynamic
  JavaBean
  API:
  RowSetDynaClass(java.sql.ResultSet resultSet)
  RowSetDynaClass(java.sql.ResultSet resultSet, boolean lowerCase)
   Connection conn = ...; // 从缓冲池取得连接
   Statement stmt = conn.createStatement();
   ResultSet rs = stmt.executeQuery("SELECT ...");
   RowSetDynaClass rsdc = new RowSetDynaClass(rs);
   rs.close();
   stmt.close();
   ...; //关闭连接返回缓冲池
   List rows = rsdc.getRows();
   ...; // 处理得到的行


  3.BeanUtils.ConvertUtils 介绍
  这个包主要用来转换从request传递过来的函数
  主要函数:
  ConvertUtils().convert(java.lang.Object value)
  ConvertUtils().convert(java.lang.String[] values, java.lang.Class clazz)
  ConvertUtils().convert(java.lang.String value, java.lang.Class clazz)
  实现例子:
   HttpServletRequest request = ...;
   MyBean bean = ...;
   HashMap map = new HashMap();
   Enumeration names = request.getParameterNames();
   while (names.hasMoreElements()) {
   String name = (String) names.nextElement();
   map.put(name, request.getParameterValues(name));
   }
   BeanUtils.populate(bean, map);//用ConvertUtils进行转换
  目前支持的转换类型:
  sjava.lang.BigDecimal
  java.lang.BigInteger
  boolean and java.lang.Boolean
  byte and java.lang.Byte
  char and java.lang.Character
  java.lang.Class
  double and java.lang.Double
  float and java.lang.Float
  int and java.lang.Integer
  long and java.lang.Long
  short and java.lang.Short
  java.lang.String
  java.sql.Date
  java.sql.Time
  java.sql.Timestamp

分享到:
评论

相关推荐

    commons-beanutils-1.9.4-API文档-中文版.zip

    赠送jar包:commons-beanutils-1.9.4.jar; 赠送原API文档:commons-beanutils-1.9.4-javadoc.jar; 赠送源代码:commons-beanutils-1.9.4-sources.jar; 赠送Maven依赖信息文件:commons-beanutils-1.9.4.pom; ...

    org.apache.commons.beanutils.jar

    这个库的核心是`org.apache.commons.beanutils`包,其中包含了大量的辅助方法,使得开发者可以更加便捷地处理JavaBean属性,避免了直接调用getter和setter方法的繁琐过程。 Apache Commons BeanUtils库的核心功能:...

    commons-beanutils-1.9.3jar包source包及相关jar包

    `commons-beanutils-1.9.3-sources.jar`则是源代码包,它包含了BeanUtils库的完整源代码,这对于开发者进行调试、学习和自定义扩展非常有用。通过查看源代码,可以深入理解内部的工作机制,以及如何有效地利用这些...

    commons-beanutils-1.8.0 jar包下载

    commons-beanutils-1.8.0 jar包: 1.commons-beanutils-1.8.0.jar 2.commons-beanutils-1.8.0-javadoc.jar 3.commons-beanutils-1.8.0-sources.jar 4.commons-beanutils-bean-collections-1.8.0.jar 5.commons-...

    commons-beanutils-1.9.4-API文档-中英对照版.zip

    赠送jar包:commons-beanutils-1.9.4.jar; 赠送原API文档:commons-beanutils-1.9.4-javadoc.jar; 赠送源代码:commons-beanutils-1.9.4-sources.jar; 赠送Maven依赖信息文件:commons-beanutils-1.9.4.pom; ...

    commons-beanutils-1.9.4

    Apache Commons BeanUtils是Java开发中一个非常重要的工具库,它为开发者提供了大量便捷的JavaBean操作功能。在本文中,我们将深入探讨`commons-beanutils-1.9.4`这个版本,了解其核心功能、使用场景以及如何在项目...

    Commons-beanutils jar包

    Commons-beanutils jar包,比较新希望对大家能有帮助

    commons-beanutils-1.8.3和commons-beanutils-1.8.0

    Apache Commons BeanUtils是Java开发中的一个实用工具库,主要用于处理JavaBeans对象,简化对JavaBean属性的操作。这个库提供了一套方便的API,使得开发者可以通过简单的API调用来获取、设置JavaBean的属性,甚至...

    commons-beanutils-1.9.2下载

    Apache Commons BeanUtils是Java开发中的一个实用工具库,它提供了对JavaBeans进行操作的便捷方法。这个库的主要目的是简化对对象属性的访问,使得开发者能够更高效地处理对象的属性设置和获取,而无需手动编写大量...

    commons-beanutils-1.9.2包含全部jar包源码及API文档

    Commons BeanUtils Most Java developers are used to creating Java classes that conform to the JavaBeans naming patterns for property getters and setters. It is natural to then access these methods ...

    commons-beanutils, Apache Commons Beanutils的镜像.zip

    commons-beanutils, Apache Commons Beanutils的镜像 Apache Commons BeanUtils Apache Commons BeanUtils提供了一个 easy-to-use,但它围绕反射。文档更多信息可以在公共BeanUtils主页上找到。 可以浏览 JavaDoc插

    commons-beanutils:Apache Commons Beanutils

    Apache Commons BeanUtils Apache Commons BeanUtils为反射和自省提供了一个易于使用但灵活的包装器。文献资料可以在上找到更多信息。 可以浏览 。 与Apache Commons BeanUtils的用法有关的问题应张贴到。在哪里可以...

    commons-beanutils-1.8.3.jar.zip

    《深入解析Apache Commons BeanUtils库》 Apache Commons BeanUtils库是Java开发中广泛使用的工具集,主要用于处理JavaBean对象的属性操作。这个库提供了一系列简便的方法,使得开发者能够轻松地进行对象属性的读取...

    commons-beanutils-1.9.3.jar

    Apache Commons BeanUtils是Java开发中的一个实用工具库,主要用于简化对JavaBean的操作。这个`commons-beanutils-1.9.3.jar`文件是该库的一个版本,它提供了丰富的API来帮助开发者更方便地处理JavaBean对象。在这个...

    commons-beanutils-1.9.4.jar.zip

    Apache Commons BeanUtils是Java开发中的一个实用库,它提供了对JavaBeans属性的简便操作。这个库简化了在对象之间复制属性、处理集合以及调用JavaBean方法的过程。在这个"commons-beanutils-1.9.4.jar.zip"压缩包中...

    commons-beanutils-1.8.3

    在这个特定的压缩包“commons-beanutils-1.8.3”中,包含了一个核心的jar包,用于支持对JavaBean对象的操作。下面我们将深入探讨Apache Commons BeanUtils 1.8.3的核心功能、使用场景及其在实际开发中的重要性。 1....

    Commons beanutils API.chm

    Commons beanutils API.chm apache Commons beanutils API

    commons-beanutils、commons-collections、commons-collections等常用jar 包下载

    1. **Apache Commons BeanUtils** - `commons-beanutils-1.9.3.jar` Apache Commons BeanUtils库是用于处理JavaBeans的工具类库。它提供了一种简单的方式来操纵JavaBean属性,无需直接调用getter和setter方法。这个...

    commons-beanutils-1.7.0.jar-解决commons-beanutils和commons-collections重复类

    解决办法是把commons-beanutils中的org/apache/commons/collections删除,这里上传一个改好可以直接使用的。

Global site tag (gtag.js) - Google Analytics