commmons-beanutils.jar使用

commons-beanutils的常用功能包括类型转换和动态bean的创建。
类型转换
关于类型转换主要用到BeanUtils 和 ConvertUtils。BeanUtils的使用是大家最熟悉的了。将javax.servlet.HttpServletRequest接受的参数转换到对应到指定的JavaBean,这是Struts等许多MVC框架中的基本服务之一。
在一次HTTP请求中,请求参数值都是字符串或字符串数组,大多数值需要被转换为底层的数据类型。BeanUtils提供了属性的setter方法,以接受字符串的值,并自动把它们转换成合适的属性类型,和getter方法,当调用getter方法时,又进行一次类型转换。除此之外,populate()方法可以把一个map中的键值对转换为bean里面的属性和值。例如
 
Java代码   收藏代码
  1. HttpServletRequest request = ...;  
  2. MyBean bean = ...;  
  3. HashMap map = new HashMap();  
  4. Enumeration names = request.getParameterNames();  
  5. while (names.hasMoreElements()) {  
  6.   String name = (String) names.nextElement();  
  7.   map.put(name, request.getParameterValues(name));  
  8. }  
  9. BeanUtils.populate(bean, map);  

  当然BeanUtils底层依赖于ConvertUtils。ConvertUtils的使用简单,常用方法如下
Java代码   收藏代码
  1. static String convert(Object value) //转换指定值为字符串  
  2. static Object convert(Object value, Class targetType) //转换指定值为指定的类  
  3. static Object convert(String[] values, Class clazz) //将字符串数组转换为指定类型的数组  
  4. static Object convert(String value, Class clazz)   //转换字符串为一指定类型  
  5.           

下面举例说明(如无特别说明,下面的所有Java代码均以此xml文件为操作对象)
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <origin dataSource="ds">  
  3.     <columns>  
  4.                 <column code="ID" name="" type="java.lang.Integer" length="" />  
  5.                 <column code="FIRSTNAME" name="" type="java.lang.String" length="" />  
  6.                 <column code="LASTNAME" name="" type="java.lang.String" length="" />  
  7.                 <column code="SEX" name="" type="java.lang.String" length="" />  
  8.     </columns>  
  9.           
  10. </origin>  

Java代码   收藏代码
  1. XMLConfiguration config = new XMLConfiguration(String); //关于XML的读取在“commons-configuration的使用”中讲过  
  2. String id = config.getString("columns.column.[@code]");   //拿到第一个Column的code  
  3. String type = config.getString("columns.column.[@type]"); //拿到第一个Column的type  
  4. Object value = ConvertUtils.convert(id,Class.forName(type)); //转换了  

动态Bean的创建

动态bean的创建也很简单,常用API如下
Java代码   收藏代码
  1. org.apache.commons.beanutils.DynaBean  
  2. org.apache.commons.beanutils.DynaClass  
  3. org.apache.commons.beanutils.BasicDynaBean      //实现了DynaBean  
  4. org.apache.commons.beanutils.BasicDynaClass     //实现了DynaClass  
  5. org.apache.commons.beanutils.DynaProperty  

第一步,就是要创建动态class
Java代码   收藏代码
  1. DynaProperty[] props = new DynaProperty[]{  
  2.         new DynaProperty("address", java.util.Map.class),  
  3.         new DynaProperty("subordinate", mypackage.Employee[].class),  
  4.         new DynaProperty("firstName", String.class),  
  5.         new DynaProperty("lastName",  String.class)  
  6.       };  //  
  7.     BasicDynaClass dynaClass = new BasicDynaClass("employee"null, props); //主要是构造props动态属性数组,名字"employee"和bean类型(这里是null)无关紧要  
第二步,创建动态bean
Java代码   收藏代码
  1. DynaBean employee = dynaClass.newInstance();  
  2. employee.set("address"new HashMap());  
  3. employee.set("subordinate"new mypackage.Employee[0]);  
  4. employee.set("firstName""Fred");  
  5. employee.set("lastName""Flintstone");  

现在,把xml文件中的所有column属性构造一个动态class(动态class.newInstance()就可以生成一个bean了,所以不讨论动态bean),在如下代码中originDynaClass就是生成的动态class
Java代码   收藏代码
  1. List<HierarchicalConfiguration>  columns = (List<HierarchicalConfiguration>) config.configurationsAt("origin.bean.columns.column");  
  2.     DynaProperty[] properties = new DynaProperty[columns.size()];  
  3.     for (int i = 0; i < columns.size(); i++) {  
  4.         HierarchicalConfiguration column = (HierarchicalConfiguration)columns.get(i);  
  5.         try {  
  6.             properties[i] = new DynaProperty(column.getString("[@code]"),Class.forName(column.getString("[@type]")));  
  7.         } catch (ClassNotFoundException e) {  
  8.             // TODO Auto-generated catch block  
  9.             logger.error("类型转换异常", e);  
  10.         }  
  11.     }  
  12. BasicDynaClass  originDynaClass = new BasicDynaClass ("origin", BasicDynaBean.class,  properties);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值