`

Beanutil应用

 
阅读更多

 0 包

org.apache.commons.beanutils
org.apache.commons.beanutils.converters
org.apache.commons.beanutils.locale
org.apache.commons.beanutils.locale.converters

 

 

 1  基础类

Order

public class Order {
	private User user;
	private Integer id;
	private String desc;
	public User getUser() {
                
                // setter/getter
}

 

User

public class User {
	private Integer id;
	private Map map;
	private String username;
// setter/getter
}

 

测试类Test

public class Test {
    private User user = new User();    
    private Order order1 = new Order();    
    private Order order2 = new Order();    
    private Order order3 = new Order();    
    private Map map = new HashMap();    
    private User user1 = new User();    
   
    public Test(){    
        init();    
    }    

   //初始化    
    public void init(){    
   
        user.setId(0);    
        user.setUsername("zhangshan");    
            
        order1.setId(1);    
        order1.setDesc("order1");    
        order1.setUser(user);        
            
        order2.setId(2);    
        order2.setDesc("order2");    
        order2.setUser(user);    
            
        order3.setId(3);    
        order3.setDesc("order3");    
        order3.setUser(user);    
            
        map.put("order1", order1);    
        map.put("order2", order2);    
        map.put("order3", order3);    
            
        user1.setId(1);    
        user1.setUsername("lisi");    
        user1.setMap(map);    
    }   
}

 

 

 2  测试代码

 

测试代码写在Test的main函数中:

        Test test = new Test();    
... ... 

 

a  获取对象的属性

  

 System.out.println(BeanUtils.getProperty(test.user, "username"));   

 

b  获取对象的内嵌属性

      //输出某个对象的内嵌属性,只要使用点号分隔    
        System.out.println(BeanUtils.getProperty(test.order1, "user.username"));  

 

 

c  获取List和Map的属性

 

        //BeanUtils还支持List和Map类型的属性,对于Map类型,则需要以"属性名(key值)"的    
        //对于Indexed,则为"属性名[索引值]",注意对于ArrayList和数组都可以用一样的方式进行操作    
        System.out.println(BeanUtils.getProperty(test.user1, "map(order2).desc"));     

 

 d  拷贝对象

        //拷贝对象的属性值    
        User tempUser = new User();    
        BeanUtils.copyProperties(tempUser, test.user1);    
            
        System.out.println(tempUser.getUsername());    
        System.out.println(tempUser.getId());  

 

 

e  动态排序

 

  // 动态设定Bean按照哪个属性来排序,而不再需要再实现bean的Compare接口进行复杂的条件判断
        List<Order> list = new ArrayList<Order>();    
        
        list.add(test.order2);    
        list.add(test.order1);    
        list.add(test.order3);    
            
        //未排序前    
        for(Order order : list){    
            System.out.println(order.getId());    
        }    
        //排序后    
        Collections.sort(list, new BeanComparator("id"));    
        for(Order order : list){    
            System.out.println(order.getId());    
        }   

 

 //:支持多个属性的复合排序 ; 如"Order By id,desc" 
        List  sortFields = new ArrayList();     
        sortFields.add(new BeanComparator("id"));    
        sortFields.add(new BeanComparator("desc"));    
        ComparatorChain multiSort = new ComparatorChain(sortFields);    
        Collections.sort(list, multiSort);    
            
        for(Order order : list){    
            System.out.println(order.getId());    
        }
         // C:使用ComparatorUtils进一步指定排序条件
        //	上面的排序遇到属性为null就会抛出异常, 也不能设定升序还是降序。
        // 不过,可以借助commons-collections包的ComparatorUtils
        //  BeanComparator,ComparableComparator和ComparatorChain都是实现了Comparator这个接口
        // java 代码
        //上面的排序遇到属性为null就会抛出异常, 也不能设定升序还是降序。    
        //不过,可以借助commons-collections包的ComparatorUtils    
        //BeanComparator,ComparableComparator和ComparatorChain都是实现了Comparator这个接口    
        Comparator mycmp = ComparableComparator.getInstance();       
        mycmp = ComparatorUtils.nullLowComparator(mycmp);  //允许null       
        mycmp = ComparatorUtils.reversedComparator(mycmp); //逆序       
        Comparator cmp = new BeanComparator("id", mycmp);    
        Collections.sort(list, cmp);    
        for(Order order : list){    
            System.out.println(order.getId());    
        } 

  

 f  Converter 把Request或ResultSet中的字符串绑定到对象的属性

    从request,resultSet等对象取出值来赋入bean中

      

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);

 

 3  API

     BeanUtils: JavaBean克隆及属性拷贝

static Object cloneBean(Object bean) : 获取拷贝对象属性
static void copyProperties(Object dest, Object orig):拷贝对象
static void copyProperty(Object bean, String name, Object value):拷贝对象的属性
static Map describe(Object bean) ://用来将一个bean以map的形式展示
static void populate(Object bean, Map properties) : //使用一个map为bean赋值
// Simple:简单类型,如String、Int......:  
static void setProperty(Object bean, String name, Object value) ;  
static String getProperty(Object bean, String name) : 属性值 
 // Indexed:索引类型,如数组、arrayList......:   
static String getIndexedProperty(Object bean, String name)   
static String getIndexedProperty(Object bean, String name, int index)
 // Maped:即Map,比如HashMap...... :   
static static String getMappedProperty(Object bean, String name, String key)    
static String getMappedProperty(Object bean, String name)  
//  设置获取属性值:  
//1:获取Indexed值 
	BeanUtils.getIndexedProperty(orderBean,"items",1);
//	或者
 	BeanUtils.getIndexedProperty(orderBean,"items[1]");
// 2:Maped:即Map,比如HashMap...... : 
  	BeanUtils.getMappedProperty(orderBean, "items","111");//key-value goods_no=111 
//	或者
  	BeanUtils.getMappedProperty(orderBean, "items(111)") 
// 3: 获取内嵌类的属性值和Simple类:
           BeanUtils.getProperty(test.order1, "user.username")  

 

 PropertyUtils:JavaBean属性拷贝
和BeanUtils类很多的方法在参数上都是相同的,但返回值不同。
    BeanUtils着重于属性,它的返回值通常是Object

// 复制对象
static void copyProperties(Object dest, Object orig) 
// set、get对象的属性
static void setProperty(Object bean, String name, Object value) 
static Object getProperty(Object bean, String name) 
// 获取对象属性的类型:如果属性不存在,则为null
 static Class getPropertyType(Object bean, String name) 
//  以map返回bean的值
static Map describe(Object bean) 

// set、get的数组和列表的值
static Object getIndexedProperty(Object bean, String name) 
static Object getIndexedProperty(Object bean, String name, int index) 
static void setIndexedProperty(Object bean, String name, int index, Object value) 
 static void setIndexedProperty(Object bean, String name, Object value) 

// set、get的map的属性
static Object getMappedProperty(Object bean, String name) 
static Object getMappedProperty(Object bean, String name, String key) 
static void setMappedProperty(Object bean, String name, Object value) 
static void setMappedProperty(Object bean, String name, String key, Object value) 
   

注意:BeanUtils与PropertyUtils的区别
BeanUtils对Bean赋值是会进行类型转化。举例来说也就是在copyProperty只要属性名相同,就算类型不同,BeanUtils也可以进行copy:而PropertyBean则可能报错。 

 

 

 ConverUtils:类型转换

 

 

MethodUtils:JavaBean方法调用,动态调用方法,得到方法,主要方法有:

// 动态调用方法
static Object invokeMethod(Object object, String methodName, Object arg) 
static Object invokeMethod(Object object, String methodName, Object[] args) 
static Object invokeMethod(Object object, String methodName, Object[] args, Class[] parameterTypes) 

// 得到方法
static Method getAccessibleMethod(Class clazz, Method method) 
static Method getAccessibleMethod(Class clazz, String methodName, Class parameterType) 
static Method getAccessibleMethod(Class clazz, String methodName, Class[] parameterTypes) 
static Method getAccessibleMethod(Method method) 

 

 


ConstructorUtils:构造Bean对象
这个类中的方法主要分成两种,一种是得到构造方法,一种是创建对象

 

//  获取动态构造器
static Constructor getAccessibleConstructor(Class klass, Class parameterType) 
static Constructor getAccessibleConstructor(Class klass, Class[] parameterTypes) 
static Constructor getAccessibleConstructor(Constructor ctor) 

//  调用构造器
static Object invokeConstructor(Class klass, Object arg) 
static Object invokeConstructor(Class klass, Object[] args) 
static Object invokeConstructor(Class klass, Object[] args, Class[] parameterTypes) 

ConvertUtils:将字符串转换为指定类型

// 转换为字符串
static String convert(Object value)  //将任意的实例转换为String 
// 将字符串value转换为clazz的一个实例:如果失败的话,就以String的形式返回value
static Object convert(String value, Class clazz) 
static Object convert(Object value, Class targetType) 
// 将数组中每个value都进行转换,最好以Object返回 
static Object convert(String[] values, Class clazz) 
 


BasicDynaBean:

 

LazyDynaBean:

  

分享到:
评论

相关推荐

    BeanUtil框架完整包

    BeanUtil框架是一个在Java开发中常用的工具库,主要用于对象属性的获取、设置、拷贝以及类型转换等操作。它的设计目标是简化Java Bean...但在使用时,开发者也需要了解其工作原理和潜在的问题,以便更好地应用和维护。

    BeanUtil Jar包

    本文将深入探讨BeanUtil的使用、功能及其在反射技术中的应用。 首先,我们需要理解JavaBeans。JavaBeans是一种符合特定规范的Java类,主要用于数据封装和组件开发。它们通常具有公有无参数构造器、公有的getter和...

    BeanUtil_Jar包

    本文将深入探讨BeanUtil_Jar包的核心特性和使用方法,帮助开发者更好地理解和应用这个经典库。 首先,让我们了解什么是JavaBean。JavaBean是一种符合特定规范的Java类,通常用来封装数据并提供公共方法来访问这些...

    BeanUtil1.8 SRC 源码和 jar包

    《BeanUtil1.8源码与jar包...在实际开发过程中,掌握BeanUtil的使用不仅可以提升开发效率,还能更好地理解和应用Java Bean的设计模式。无论是作为开发工具,还是学习资料,BeanUtil1.8都是Java开发者不可或缺的资源。

    BeanUtil_MYSQL_mybaatis_

    在MySQL方面,MySQL是一种关系型数据库管理系统,广泛应用于Web应用中,因为它性能高效、稳定性强且易于使用。DDL语句用来定义数据库的结构,如创建、修改和删除表。DML语句则用于操纵数据库中的数据,包括INSERT...

    BeanUtil与Logging

    1. **BeanUtil的应用**: - **属性赋值**:BeanUtils的`copyProperties()`方法可以方便地将一个对象的属性值复制到另一个对象,这对于数据传输对象(DTO)的转换非常有用。 - **反射操作**:`BeanUtils....

    Servlet中对获取网页表单数据自动给JavaBean赋值的BeanUtil工具类

    本文将深入探讨BeanUtil工具类的工作原理以及如何在Servlet中使用它。 首先,让我们理解一下JavaBean的概念。JavaBean是一种遵循特定规范的Java类,主要用于封装数据。它通常具有公有构造器、公有getter和setter...

    beanutil的jar包打包

    "beanutil的jar包打包" 指的是将Apache Commons BeanUtils相关的类库打包成一个或多个JAR(Java Archive)文件。BeanUtils是Java开发中常用的工具包,它提供了对Java Bean操作的各种便利方法,如属性的设置与获取,...

    简单的jsp项目需要的jar包,包括MySQL,JDBCTemplte,jQuery,JSTL,c3p0,druid,BeanUtil

    标题提到的“简单的jsp项目需要的jar包”是指为了构建一个基础的JSP(Java Server Pages)应用程序,所必需的一些Java库文件。这些jar包包括了数据库连接、模板处理、前端交互以及数据管理等多个方面的组件。其中,...

    beanutil源代码

    在实际应用中,"用fileupload实现jsp上传功能"涉及到以下步骤: 1. 添加Apache Commons FileUpload和Commons IO的依赖库。 2. 创建一个Servlet或Filter来处理文件上传请求。 3. 配置Servlet以接收多部分数据。 4. ...

    dom4j jstl beanUtil log4j等jar包

    【标题】中的"dom4j jstl beanUtil log4j等jar包"涉及了四个重要的Java库,它们在开发Java应用程序,特别是Web应用时非常常见。下面将逐一详细介绍这些库的功能、用途以及如何在项目中使用它们。 1. **DOM4J**:这...

    beanutil资料

    Apache BeanUtils是Apache软件基金会开发的一个Java库,主要用于简化Java Bean对象之间的属性操作。...通过阅读API文档和实践使用,开发者可以更好地掌握这一强大的库,并将其应用到自己的项目中。

    commons-beanutils.jar

    在Java应用中,JavaBean扮演着数据载体的角色,BeanUtils则提供了对这些载体进行操作的工具。 Apache Commons BeanUtils库包含的核心功能有: 1. **属性复制(Property Copying)**:BeanUtils最著名的功能就是...

    文件上传fileload,beanutils以及io包

    在实际应用中,文件上传的流程大致如下: 1. **初始化**:配置`FileUpload`,设置允许的最大文件大小、临时目录等。 2. **解析请求**:使用`ServletFileUpload`检查请求是否是文件上传请求,并解析出`FileItem`实例...

    BeanUtils依赖Jar包与源码.rar

    这个压缩包包含了BeanUtils的核心组件`commons-beanutils-1.8.3.jar`以及其依赖的`commons-logging-1.1.1.jar`,这两个Jar包在Java开发中具有广泛的应用。 首先,`commons-beanutils-1.8.3.jar`是BeanUtils的主要...

    java 匿名内部类的使用规范

    本篇文章将深入探讨Java匿名内部类的使用规范,帮助你更好地理解和应用这一特性。 首先,理解匿名内部类的基本概念。匿名内部类没有名字,它不能被其他类直接引用,但可以作为局部变量、成员变量或者方法参数。它...

    Java反射 JavaBean对象自动生成插入,更新,删除,查询sql语句操作.docx

    在这个示例代码中,提供了一个BeanUtil类,该类提供了多个静态方法,用于生成sql语句。这些方法包括getBeanName、getBeanPropertyList、getBeanFilesList等。这些方法使用了Java反射机制来获取JavaBean对象的信息,...

    一种简单的json解析方法

    在实际应用中,`AjaxResponse.java`可能定义如下: ```java public class AjaxResponse&lt;T&gt; { private int code; // 响应状态码 private String message; // 响应消息 private T data; // 响应数据 // 构造方法...

    Struts核心教程

    它还提供了类型转换器,简化了数据类型转换的过程,避免了像Struts1中需要注册BeanUtil的繁琐步骤。 Struts2支持多种视图技术,如JSP、FreeMarker和Velocity,这为开发者提供了更大的灵活性。在表单验证方面,...

    消息队列监听器无法注入bean的问题解决

    5. **重启服务**:完成修改后,重启服务以应用新的配置。 总之,解决“消息队列监听器无法注入bean”的问题需要从配置、代码和依赖注入等多个角度进行排查。在实际操作中,务必细心检查每一个环节,以确保所有组件...

Global site tag (gtag.js) - Google Analytics