`
junjunbest
  • 浏览: 40151 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Jakarta Commons BeanUtils 相关

阅读更多

  1.简介  
  在一般的写bean组件的时候,都必须要写setter和getter方法,当然如果我们事先已经知道bean的相关属性和  
  方法,写bean是比较简单的,但是组件太多的时候,重复编写常常是枯燥乏味令人厌烦的。但当有些时候我么需  
  要调用动态对象的属性的时候,我们应该怎么来设定和获取对象的属性呢?BeanUtils就可以帮助我们来解决这  
  个问题。它需要Collections包和logging包的支持。最新版本1.7,文档还是1.6.1的.  
  2.已经使用BeanUtils的事例  
  *构建和java对象模型交互的脚本语言,比如Bean   Scripting   Framework    
  *构建web层显示和相似用途的模板语言处理器,如jsp或者Velocity  
  *构建适用于jsp和xsp环境的自定义标签库,如Jakarta   Taglibs,Struts,Cocoon  
  *处理基于xml的配置资源文件,如Ant创建脚本,应用程序部署文件和Tomcat的xml配置文件  
  3.API简介  
  BeanUtils   的   Java   API   主要的   package   总共四个  
  org.apache.commons.beanutils    
  这个是BeanUtils最基本的包,提供了处理getter和setter方法属性的类  
  org.apache.commons.beanutils.converters    
  Converter接口的标准实现,在启动的时候和ConvertUtils一同注册  
  org.apache.commons.beanutils.locale    
  组件的本地化处理包  
  org.apache.commons.beanutils.locale.converters    
  LocaleConverter接口的标准实现,启动的时候和LocaleConvertUtils   一同注册  
  4.org.apache.commons.beanutils介绍  
  这四个包本专题只介绍这一个,其他的使用的时候请自己参考它的文档,文档内容写得很好.  
    1.PropertyUtils  
    它支持三种类型的属性值-Simple,Indexed,Mapped  
    我们先创建一个简单的bean  
            public   class   Employee   {  
                  public   Address   getAddress(String   type);  
                  public   void   setAddress(String   type,   Address   address);  
                  public   Employee   getSubordinate(int   index);  
                  public   void   setSubordinate(int   index,   Employee   subordinate);  
                  public   String   getFirstName();  
                  public   void   setFirstName(String   firstName);  
                  public   String   getLastName();  
                  public   void   setLastName(String   lastName);  
          }  
    *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();  
          ...;                                       //   处理得到的行  
    2.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    
分享到:
评论

相关推荐

    jakarta commons cookbook 电子版

    1. **I/O组件**:Jakarta Commons IO提供了大量与输入/输出相关的实用工具类,包括文件操作、流处理、字符集转换等。学习这个组件,开发者可以更高效地进行文件读写、流处理和数据转换,减少错误和提高代码的可读性...

    jakarta-commons 相关依赖包

    jakarta-commons 相关依赖包,文件列表: commons-attributes-api.jar commons-attributes-compiler.jar commons-beanutils.jar commons-codec.jar commons-collections.jar commons-dbcp.jar commons-digester.jar ...

    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 ...

    jakarta commons cookbook.zip

    在Java开发中,Jakarta Commons库提供了许多子项目,如IO、Lang、BeanUtils、Collections、Codec等,每个子项目都专注于特定的领域,如输入/输出操作、字符串处理、对象的创建和复制、集合的扩展以及编码解码等。...

    Apache Jakarta Commons 使用手册

    ### Apache Jakarta Commons 使用手册知识点详解 #### 一、概述 《Apache Jakarta Commons 使用手册》是一部详细介绍Apache Jakarta Commons项目下的各种Java组件的专业书籍。该书由Will Iverson编写,旨在为...

    JakartaCommons 详细教程更助于你的基础

    3. Jakarta Commons BeanUtils Commons BeanUtils库提供了一种简化Java Bean属性操作的方法。它包含以下组件: - BeanUtils:提供对Bean属性进行读取和设置的方法。 - BeanUtilsBean:底层支持Bean操作的工具类。 -...

    jakarta commons-API

    **Jakarta Commons API** 是一个Java开发人员广泛使用的开源库集合,它包含了多个模块,每个模块专注于特定的编程任务,从而简化了Java应用程序的开发。Jakarta Commons是Apache软件基金会的一个项目,它提供了大量...

    commons-beanutils-1.8.3.jar.zip

    这个库允许开发者在不改变代码的情况下切换不同的日志实现,如log4j、java.util.logging或Jakarta Commons Logging自己内置的简单日志实现。通过使用Commons Logging,应用的代码可以保持与具体日志框架无关,这样在...

    json全套架包

    在使用json时所需要的架包,包括了】jakarta commons-lang 2.5 jakarta commons-beanutils 1.8.0 jakarta commons-collections 3.2.1 jakarta commons-logging 1.1.1 ezmorph 1.0.6

    Jakarta Commons cookbook.chm与中文版的笔记

    《Jakarta Commons Cookbook》是Java开发者的一本重要参考资料,它主要涵盖了Apache Jakarta Commons项目中的各种组件和工具的使用方法。Apache Commons是Java开发中的一个关键部分,提供了许多实用且功能强大的类库...

    Jakarta Commons使用

    除了上述组件外,Jakarta Commons 还包括 BeanUtils、Codec、 Digester 等,它们提供了诸如对象属性映射、编码解码、XML 解析等功能,大大简化了 Java 开发中的常见任务。 通过了解和使用 Jakarta Commons,开发者...

    Jakarta Commons

    **Jakarta Commons 知识点详解** Jakarta Commons 是 Apache 软件基金会的一个项目集合,它提供了大量的可重用 Java 类库,旨在简化开发人员的工作。这些类库覆盖了从文件上传、缓存处理到网络通信等多个领域,极大...

    Jakarta Commons Online Bookshelf

    《Jakarta Commons在线书架》一书深入探讨了Jakarta Commons框架的核心概念与应用实践,为读者提供了一次全面理解并掌握Jakarta Commons组件的机会。本书由Vikram Goyal编写,版权归属Manning Publications,出版于...

    JAKARTA COMMONS

    2. **Commons BeanUtils**: 这个库是对 Java 反射和 introspection API 的封装,简化了对 Java 对象属性的操作,如设置和获取属性值,以及进行深度复制等。 3. **Commons Betwixt**: 用于将 JavaBean 映射到 XML ...

    commons-beanutils-1.8.2-bin全功能包,包括所需的5个jar文件和官方API

    Apache Commons BeanUtils库是Apache软件基金会的Jakarta Commons项目的一部分。它的主要目标是简化JavaBeans对象的属性访问,通过提供一系列的工具方法,可以避免编写大量样板代码来读取和设置Java对象的属性。 2...

    Jakarta Commons Cookbook(CHM)

    《Jakarta Commons Cookbook》是一本深入探讨Apache Jakarta Commons组件使用的指南。...结合提供的CHM电子书和相关资源,你可以深入学习并掌握Jakarta Commons组件的使用,提升自己的编程实践能力。

    介绍Jakarta Commons的烹饪书

    1. **IoC(Inversion of Control)依赖注入**:Jakarta Commons包含BeanUtils模块,提供了一种方便的JavaBean操作方式,实现了依赖注入,使得组件间的耦合度降低,提高了代码的可测试性和可维护性。 2. **...

    commons-beanutils-1.8.0

    这个库是Apache Commons Logging的实现,提供了一种抽象的日志接口,允许开发者选择底层的日志实现,如log4j、java.util.logging或Jakarta LogKit等。在BeanUtils中,使用Commons Logging进行日志记录,使得库的使用...

    Jakarta commons docs API CHM 格式

    commons-beanutils 提供对 Java 反射和自省API的包装 commons-betwixt 这个组件提供一个XML自省(introspection)机制用来把Java Bean映射到XML文档 commons-chain 提供实现组织复杂的处理流程的“责任链模式” ...

    [Jakarta Commons笔记]

    【Jakarta Commons笔记】 Jakarta Commons是Apache软件基金会的一个项目集合,它提供了许多Java开发中常用的工具类和组件。这个项目旨在减少重复的工作,通过共享和重用代码,提高开发效率。Jakarta Commons包含了...

Global site tag (gtag.js) - Google Analytics