浅析Java中Apache BeanUtils和Spring BeanUtils的用法

浅析Java中Apache BeanUtils和Spring BeanUtils的用法

在Java中,BeanUtils是常用的一个实用工具类库,提供了对JavaBean属性的快速读写、类型转换等操作,而在Spring框架中,也有BeanUtils提供了一些符合Spring容器特性的扩展功能,下面将会对Apache BeanUtils和Spring BeanUtils进行详细的介绍。

Apache BeanUtils

Apache BeanUtils是Apache Commons项目的一部分,是一个Java的开源库,在Java中的主要功能是为JavaBean提供属性的拷贝、值的获取、值的设置、属性值的复制等操作。Apache BeanUtils提供了许多方法用于获取、设置和拷贝属性,同时还提供了类型转换等功能。

基本使用

首先需要导入BeanUtils的maven依赖

<dependency>
  <groupId>commons-beanutils</groupId>
  <artifactId>commons-beanutils</artifactId>
  <version>1.9.4</version>
</dependency>

然后在代码中可以通过如下方式进行使用:

public static void copyProperties(Object dest, Object orig) throws IllegalAccessException, InvocationTargetException {
    if (dest == null) {
        throw new IllegalArgumentException("No destination bean specified");
    }
    if (orig == null) {
        throw new IllegalArgumentException("No origin bean specified");
    }
    if (dest.getClass().isAssignableFrom(orig.getClass())) {
        return;
    }
    PropertyDescriptor[] origDescriptors = getPropertyDescriptors(orig.getClass());
    for (PropertyDescriptor origDescriptor : origDescriptors) {
        String name = origDescriptor.getName();

        if ("class".equals(name)) {
            continue;
        }
        if (isReadable(origDescriptor)) {
            PropertyDescriptor destDescriptor = getPropertyDescriptor(dest.getClass(), name);
            if (destDescriptor != null && isWriteable(destDescriptor)) {
                Object value = getSimpleProperty(orig, name);
                copyProperty(dest, name, value);
            }
        }
    }
}

在上述代码中,copyProperties方法对于目标对象(dest)和原始对象(orig)的属性进行复制,若两个对象类型不同则会进行类型转换。需要注意的是,在调用方法时需要处理 IllegalAccessException 和 InvocationTargetException 异常。

类型转换

Apache BeanUtils 还提供了类型转换的方法,其定义如下:

public static Object convert(Object value, Class<?> type)

其中value为需要转换的对象,type为转换类型,使用方法如下:

Integer integer = (Integer)BeanUtils.convert("10", Integer.class);
System.out.println(integer);//输出10

示例

下面为一个使用示例:

public static void main(String[] args) throws InvocationTargetException, IllegalAccessException {
    User user = new User("John", "Doe", 25);
    Map<String, Object> map = new HashMap<>();
    BeanUtils.describe(user, map);

    for (Map.Entry<String,Object> entry : map.entrySet()){
        System.out.println(entry.getKey() + " : " + entry.getValue());
    }
}

class User {
    private String firstName;
    private String lastName;
    private int age;

    public User(String firstName, String lastName, int age) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }

    // getter and setter
}

在上述代码中,我们定义了一个User类,并对该类的属性进行了get、set方法的定义。在main函数中,通过BeanUtils.describe方法对于一个User对象进行属性值的获取,并将其存储到了一个HashMap中,然后在for循环中遍历HashMap并输出。

输出结果如下:

lastName : Doe
firstName : John
class : class com.example.User
age : 25

Spring BeanUtils

除了Apache BeanUtils之外,在Spring框架中也提供了BeanUtils,其提供了一些符合Spring框架特性的扩展功能,常见的用法如下:

基本使用

Spring BeanUtils提供了BeanUtils.copyProperties方法用于属性的复制,可以通过如下方式进行使用:

BeanUtils.copyProperties(source, target);

在上述代码中,source是原始对象,target是目标对象,Spring BeansUtils 会将原始对象的所有属性值复制到目标对象中。

支持忽略null值和空值

在属性复制过程中,有时候需要忽略null值和空值,此时可以通过设置BeanUtils中copyProperties的ignoreNullProperties和ignoreEmptyProperties参数来实现,在参数设置为true的情况下,BeanUtils会自动过滤掉源对象中null或者空值的属性。

BeanUtils.copyProperties(source, target, "id", "name", "age");

在上述代码中,我们传递了一个参数数组,用于忽略某些属性的复制。

示例

下面为一个使用示例:

public static void main(String[] args) {
    User user = new User("John", "Doe", 25);
    UserInfo userInfo = new UserInfo();
    BeanUtils.copyProperties(user, userInfo);
    System.out.println(userInfo);
}

class User {
    private String firstName;
    private String lastName;
    private int age;

    public User(String firstName, String lastName, int age) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }

    // getter and setter
}

class UserInfo {
    private String name;
    private int age;

    // getter and setter
}

在上述代码中,我们定义了一个User类和一个UserInfo类,创建了一个User对象,并使用 BeanUtils.copyProperties 将其属性值复制到了 UserInfo 对象中,最后输出 UserInfo 对象,输出结果如下:

UserInfo{name='John Doe', age=25}

结论

总之,无论是Apache BeanUtils还是Spring BeansUtils都是对于JavaBean属性值复制的一种工具,使用方法十分简单,同时还支持类型转换、忽略null值和空值等功能,方便应用在不同的场景中,开发人员可根据具体的需求选择合适的方法进行操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅析Java中Apache BeanUtils和Spring BeanUtils的用法 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Java之String.format()方法案例讲解

    下面将详细讲解“Java之String.format()方法案例讲解”的完整攻略。 1. String.format()方法介绍 String.format()方法是Java中的一个常用方法,用于格式化字符串。该方法的语法如下: public static String format(String format, Object… args) 其中,第一个…

    Java 2023年5月26日
    00
  • Java实战项目之校园跑腿管理系统的实现

    Java实战项目之校园跑腿管理系统的实现攻略 一、项目简介 本项目是一款基于Java语言的校园跑腿管理系统,实现了用户端和管理员端的功能,其中用户端包括下单、支付、查看订单等功能,管理员端包括订单管理、用户管理、商品管理等功能。本项目旨在帮助校园内的学生更便利地完成各种跑腿任务。 二、技术栈 Spring Boot MyBatis MySQL Spring …

    Java 2023年5月30日
    00
  • Java如何获取数组和字符串的长度(length还是length())

    获取数组和字符串的长度可以使用不同的属性或方法,下面将分别介绍。 一、获取数组长度 获取Java中数组的长度可以使用.length属性,这个属性是数组类型的一个成员,用于返回数组的长度,即数组元素的个数。示例如下: int[] nums = {1, 2, 3, 4, 5}; // 定义整型数组 System.out.println("数组长度为:&…

    Java 2023年5月26日
    00
  • JSP 中request与response的用法详解

    标题:JSP 中request与response的用法详解 简介:本文将详细讲解 JSP 中 request 与 response 对象的用法,包括获取参数、响应请求等操作,以及使用两个示例演示如何使用这些对象。 获取参数 在 JSP 中,获取页面提交的参数是非常常见的操作。在处理页面提交时,可以使用 request 对象来获取参数。以下是一个简单的示例: …

    Java 2023年6月15日
    00
  • java.lang.NullPointerException 如何处理空指针异常的实现

    处理空指针异常是 Java 应用程序开发中的常见问题。”java.lang.NullPointerException”是一个异常类型,表示代码试图访问一个空对象或者空引用。以下是处理空指针异常的完整攻略: 1. 异常处理 在 Java 中,对于空指针异常,我们可以使用try-catch语句来捕获并处理异常。做法是在 try 块中写入可能会出现异常的代码,而在…

    Java 2023年5月26日
    00
  • Java多线程阻塞与唤醒代码示例

    下面是Java多线程阻塞与唤醒代码示例的完整攻略。 前置知识 在开始讲解Java多线程阻塞与唤醒代码示例之前,需要掌握以下知识点: 多线程的概念与基本操作,如创建线程、线程同步等; 线程阻塞与唤醒的概念与使用方法,如wait()、notify()、notifyAll()等; 线程状态的概念与使用,如Thread.State等。 示例一:生产者与消费者问题 生…

    Java 2023年5月19日
    00
  • 基于spring boot 的配置参考大全(推荐)

    下面就来详细讲解一下“基于Spring Boot的配置参考大全(推荐)”的完整攻略。 1. 基本介绍 “基于Spring Boot的配置参考大全(推荐)”是一篇非常全面的配置攻略,旨在帮助Spring Boot开发者更好地了解和掌握Spring Boot的配置方式。该文件包含了以下内容: Spring Boot配置文件的基本语法和命名规则 常用的配置方式,包…

    Java 2023年5月15日
    00
  • springboot使用shiro-整合redis作为缓存的操作

    Spring Boot使用Shiro整合Redis作为缓存的操作 在Spring Boot应用程序中,我们可以使用Apache Shiro框架来实现安全认证和授权功能。同时,我们也可以使用Redis作为Shiro的缓存存储。在本文中,我们将详细介绍如何使用Shiro整合Redis作为缓存的操作,并提供两个示例说明。 步骤分析 在Spring Boot应用程序…

    Java 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部