Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Java 进阶篇】Java BeanUtils 使用详解

【Java 进阶篇】Java BeanUtils 使用详解

作者头像
繁依Fanyi
发布于 2023-10-31 06:11:35
发布于 2023-10-31 06:11:35
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

Java中的BeanUtils是一组用于操作JavaBean的工具,它允许你在不了解JavaBean的具体内部结构的情况下,访问和修改其属性。本文将详细介绍Java BeanUtils的使用,包括如何获取和设置JavaBean的属性,复制属性,以及如何处理嵌套属性和集合属性。

什么是JavaBean

在开始之前,让我们先了解一下什么是JavaBean。JavaBean是一种特殊的Java类,它遵循一组命名规范和编程约定,通常用于存储数据。JavaBean的特点包括:

  • 具有无参数的公共构造函数。
  • 属性由公共的setter和getter方法管理。
  • 可序列化,可以用于持久化和网络传输。
  • 遵循一些命名规范,如属性的getter方法应该以"get"或"is"开头,setter方法以"set"开头。

以下是一个简单的JavaBean示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Person {
    private String name;
    private int age;

    public Person() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

在上面的示例中,Person类是一个典型的JavaBean,它有两个属性(name和age),每个属性都有对应的setter和getter方法。

添加BeanUtils库

要使用BeanUtils,你需要添加相关的库依赖。BeanUtils通常使用Apache Commons BeanUtils库。你可以在Maven项目中的pom.xml文件中添加以下依赖:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
    <groupId>commons-beanutils</groupId>
    <artifactId>commons-beanutils</artifactId>
    <version>1.9.4</version>
</dependency>

在Gradle项目中,你可以在build.gradle文件中添加以下依赖:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
implementation 'commons-beanutils:commons-beanutils:1.9.4'

获取和设置属性值

获取属性值

BeanUtils提供了一种简单的方式来获取JavaBean的属性值。你可以使用PropertyUtils类的getProperty方法来获取属性的值。

以下是如何获取Person对象的name属性的值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import org.apache.commons.beanutils.PropertyUtils;

public class Main {
    public static void main(String[] args) throws Exception {
        Person person = new Person();
        person.setName("Alice");

        String name = (String) PropertyUtils.getProperty(person, "name");
        System.out.println("Name: " + name);
    }
}

在上面的代码中,我们创建了一个Person对象,然后使用PropertyUtils.getProperty方法来获取name属性的值。

设置属性值

BeanUtils还允许你设置JavaBean的属性值。你可以使用PropertyUtils类的setProperty方法来设置属性的值。

以下是如何设置Person对象的age属性的值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import org.apache.commons.beanutils.PropertyUtils;

public class Main {
    public static void main(String[] args) throws Exception {
        Person person = new Person();

        PropertyUtils.setProperty(person, "age", 30);
        System.out.println("Age: " + person.getAge());
    }
}

在上面的代码中,我们使用PropertyUtils.setProperty方法将age属性的值设置为30。

复制属性

BeanUtils还提供了复制属性的功能,允许你从一个JavaBean复制属性值到另一个JavaBean。这在对象之间的数据传递和转换时非常有用。

复制所有属性

要复制一个JavaBean的所有属性到另一个JavaBean,你可以使用BeanUtils类的copyProperties方法。

以下是一个示例,将一个Person对象的属性复制到另一个Person对象:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import org.apache.commons.beanutils.BeanUtils;

public class Main {
    public static void main(String[] args) throws Exception {
        Person source = Person();
        source.setName("Alice");
        source.setAge(25);

        Person destination = new Person();

        BeanUtils.copyProperties(destination, source);

        System.out.println("Destination Name: " + destination.getName());
        System.out.println("Destination Age: " + destination.getAge());
    }
}

在上面的示例中,我们创建了两个Person对象,然后使用BeanUtils.copyProperties方法将source对象的属性复制到destination对象。最终,destination对象的属性与source对象相同。

复制指定属性

如果你只想复制JavaBean的部分属性,可以使用PropertyUtils类的copyProperty方法。

以下是一个示例,只复制Person对象的name属性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import org.apache.commons.beanutils.PropertyUtils;

public class Main {
    public static void main(String[] args) throws Exception {
        Person source = new Person();
        source.setName("Alice");

        Person destination = new Person();

        PropertyUtils.copyProperty(destination, "name", source.getName());

        System.out.println("Destination Name: " + destination.getName());
    }
}

在上面的示例中,我们使用PropertyUtils.copyProperty方法只复制name属性的值。

处理嵌套属性

有时,JavaBean中的属性可以是其他JavaBean对象。BeanUtils允许你处理嵌套属性,即在一个JavaBean中的属性是另一个JavaBean对象。

获取嵌套属性

要获取嵌套属性的值,你可以使用点号.来访问属性的子属性。

假设Person类有一个Address属性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Person {
    private String name;
    private Address address;

    // 省略其他代码
}

你可以使用以下方式获取Person对象的address属性的street属性的值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import org.apache.commons.beanutils.PropertyUtils;

public class Main {
    public static void main(String[] args) throws Exception {
        Person person = new Person();

        Address address = new Address();
        address.setStreet("123 Main St");

        person.setAddress(address);

        String street = (String) PropertyUtils.getProperty(person, "address.street");
        System.out.println("Street: " + street);
    }
}

在上面的示例中,我们使用点号.来访问address属性的street属性。

设置嵌套属性

要设置嵌套属性的值,你可以使用点号.来设置属性的子属性。

继续上面的示例,我们可以设置Person对象的address属性的street属性的值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import org.apache.commons.beanutils.PropertyUtils;

public class Main {
    public static void main(String[] args) throws Exception {
        Person person = new Person();

        Address address = new Address();

        PropertyUtils.setProperty(person, "address.street", "456 Elm St");

        System.out.println("Street: " + person.getAddress().getStreet());
    }
}

在上面的示例中,我们使用点号.来设置address属性的street属性的值。

处理集合属性

有时,JavaBean中的属性可以是集合类型,如List、Set或Map。BeanUtils允许你处理集合属性,即在一个JavaBean中的属性是集合。

获取集合属性

要获取集合属性的值,你可以使用方括号[]来访问集合中的元素。如果属性是一个List或数组,可以使用索引;如果属性是一个Map,可以使用键。

假设Person类有一个hobbies属性,它是一个List:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Person {
    private List<String> hobbies;

    // 省略其他代码
}

你可以使用以下方式获取Person对象的hobbies属性的第一个元素:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import org.apache.commons.beanutils.PropertyUtils;

public class Main {
    public static void main(String[] args) throws Exception {
        Person person = new Person();

        List<String> hobbies = new ArrayList<>();
        hobbies.add("Reading");
        hobbies.add("Traveling");

        person.setHobbies(hobbies);

        String firstHobby = (String) PropertyUtils.getProperty(person, "hobbies[0]");
        System.out.println("First Hobby: " + firstHobby);
    }
}

在上面的示例中,我们使用方括号[]来访问hobbies属性的第一个元素。

设置集合属性

要设置集合属性的值,也可以使用方括号[]来设置集合中的元素。

继续上面的示例,我们可以设置Person对象的hobbies属性的第一个元素:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import org.apache.commons.beanutils.PropertyUtils;

public class Main {
    public static void main(String[] args) throws Exception {
        Person person = new Person();

        List<String> hobbies = new ArrayList<>();
        hobbies.add("Reading");
        hobbies.add("Traveling");

        person.setHobbies(hobbies);

        PropertyUtils.setProperty(person, "hobbies[0]", "Cooking");

        System.out.println("First Hobby: " + person.getHobbies().get(0));
    }
}

在上面的示例中,我们使用方括号[]来设置hobbies属性的第一个元素。

总结

Java BeanUtils是一个强大的工具,允许你在不了解JavaBean的内部结构的情况下,访问和修改其属性。你可以使用BeanUtils来获取和设置属性值,复制属性,处理嵌套属性和集合属性。这使得在Java应用程序中处理对象之间的数据传递和转换变得更加容易。

希望本文对你理解Java BeanUtils的使用提供了帮助。继续探索和学习,你会发现BeanUtils在开发过程中的许多场景中都是非常有用的工具。

如果你想深入学习Java BeanUtils,可以查阅官方文档和示例代码,进一步了解其功能和用法。祝你在Java开发中取得成功!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【commons-beanutils专题】003- PropertyUtils 专题
用BeanUtils.getProperty获取属性的类必须是public,否则会报此错误!
訾博ZiBo
2025/01/06
920
Java 内省(Introspector)和 BeanUtils
内省(Introspector) 是Java 语言对 JavaBean 类属性、事件的一种缺省处理方法。
java干货
2021/02/19
5960
Java安全之CommonsBeanUtils链
Apache Commons项目的一个 Java 类库,提供了一组简单易用的API来操作 Java 对象和 Bean 属性。它的主要功能是将Java Bean的属性值与一组键值对(例如,从HTTP请求或表单参数中)相互转换。主要对 JavaBean 功能的增强。以 Utils 结尾,一般这都是一个工具类/集。
ph0ebus
2023/05/16
3420
【commons-beanutils专题】004- BeanUtils 专题
訾博ZiBo
2025/01/06
1030
commons-beanutils_Bean @session
所谓 BeanUtils 为何要开发呢, 每个工程师或许在写 JavaBean 的时候, 都会乖乖地去写 getters 和 setters, 就是 getXXX() 及 setXXX() methods, 但是当你的 object 是动态产生的, 也许是用档案, 也许是其它原因, 那你该如何去存取数据呢 !!几个例子你可能会用到 BeanUtils, 当然, 这是已经存在的项目了。
全栈程序员站长
2022/10/03
5190
【commons-beanutils专题】005- ConvertUtils 专题
訾博ZiBo
2025/01/06
640
下列那个类有获取PropertyDescriptor实例的方法_java反射怎么理解
内省(Introspector) 是Java 语言对JavaBean类属性、事件的一种缺省处理方法。   JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。如果在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为“值对象”(Value Object),或“VO”。方法比较少。这些信息储存在类的私有变量中,通过set()、get()获得。 例如类UserInfo :
全栈程序员站长
2022/11/15
6400
JavaBean与内省操作
JavaBean是一种特殊的Java类,主要用于传递数据信息,这种Java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。
MonroeCode
2018/01/11
7240
CommonsBeanutils与无commons-collections的Shiro反序列化利用
上一篇文章里,我们认识了java.util.PriorityQueue,它在Java中是一个优先队列,队列中每一个元素有自己的优先级。在反序列化这个对象时,为了保证队列顺序,会进行重排序的操作,而排序就涉及到大小比较,进而执行java.util.Comparator接口的compare()方法。
phith0n
2021/04/22
1.6K0
apache-commons家族的八兄弟(上)
Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动。篇幅很长所以拆分为两篇。
lyb-geek
2022/03/10
4910
Java反序列化(九) | CommonsBeanutils
其实前面的CommonsBeanutilsShiro已经使用了一遍了, 但是想了想CB链还是值得拥有自己的一篇的文章的所以就再分析了一遍。
h0cksr
2023/05/17
4420
BeanUtils.copyProperties的用法「建议收藏」
BeanUtils它提供了对java反射和自省API的包装。它里面还有很多工具类,这里我们介绍一下copyProperties。
全栈程序员站长
2022/09/06
4.6K0
BeanUtils.copyProperties的用法「建议收藏」
BeanUtils开发包的使用
对内省技术有了一定的了解之后,我们就可以来学习一下BeanUtils开发包的使用了。
wangweijun
2020/02/13
9950
java 对象拷贝方法beanutils_java copy方法
BeanUtils提供对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度。
全栈程序员站长
2022/11/10
9510
Java反序列化(八) | CommonsBeanutilsShiro
可见使用到CommonsCollections包, 此外还有一个问题就是这里用的CB依赖版本为1.9.2 , 但是我们在Shiro-1.2.4中默认的CB依赖版本为1.8.3 。
h0cksr
2023/05/17
4230
SpringBoot日志这样打印,简洁又清晰~
为了更方便地排查问题,电商交易系统的日志中需要记录用户id和订单id等字段。然而,每次打印日志都需要手动设置用户id,这一过程非常繁琐,需要想个办法优化下。
码农编程进阶笔记
2024/12/05
2720
SpringBoot日志这样打印,简洁又清晰~
Java 处理json经常使用代码
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/115940.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/08
4650
避免使用beanutils进行属性的copy_聚散球的使用方法
因为setProperty是JSP中的标签,因此使用model 2模式JSP+Servlet+JavaBean的时候,JSP将form提交给Servlet程序,而Servlet程序无法像JSP一样使用setProperty对数据进行封装,
全栈程序员站长
2022/10/01
5820
避免使用beanutils进行属性的copy_聚散球的使用方法
为什么大厂都不推荐使用BeanUtils?
今天,通过代码实例、源码解读、四大工具类横向对比的方式,和大家一起聊一聊对象赋值的问题。
码猿技术专栏
2023/05/01
6580
为什么大厂都不推荐使用BeanUtils?
commons-beanutils 的三种利用原理构造与POC
commons-beanutils 是 Apache 提供的一个用于操作 JAVA bean 的工具包。里面提供了各种各样的工具类,让我们可以很方便的对bean对象的属性进行各种操作。
FB客服
2022/11/14
1.1K0
commons-beanutils 的三种利用原理构造与POC
相关推荐
【commons-beanutils专题】003- PropertyUtils 专题
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验