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

news2024/11/22 16:19:37

在这里插入图片描述

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

什么是JavaBean

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

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

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

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文件中添加以下依赖:

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

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

implementation 'commons-beanutils:commons-beanutils:1.9.4'

获取和设置属性值

获取属性值

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

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

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属性的值:

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对象:

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属性:

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属性:

public class Person {
    private String name;
    private Address address;

    // 省略其他代码
}

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

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属性的值:

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:

public class Person {
    private List<String> hobbies;

    // 省略其他代码
}

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

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属性的第一个元素:

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开发中取得成功!

作者信息

作者 : 繁依Fanyi
CSDN: https://techfanyi.blog.csdn.net
掘金:https://juejin.cn/user/4154386571867191

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1153300.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VS Code 全局搜索代码变量名时,有些文件中有这个变量但是没有被搜索到的问题

可以打开visual studio code&#xff0c;打开文件->首选项->设置&#xff0c;去掉 Use Ignore Files 这个选项。

FL Studio21.2中文版终身免费更新

FL Studio水果音乐编曲软件中文版,一款强大的音乐制作软件,可以进行音乐编曲、剪辑、录音、混音。FL Studio中文官网提供各个版本编曲软件的正版购买与下载和众多编曲软件教程。 FL Cloud 音效库包含开放版权的Loop和采样&#xff0c;以及来自 FL Studio 著名用户的艺术家独家…

【安装】自建Rustdesk Server

文章目录 RustDesk说明RustDesk优点RustDesk相关链接非Docker基于CentOSRustDesk默认程序占用端口说明 启动 hbbr 是中继服务器启动 hbbs 是ID服务器客户端配置 RustDesk说明 RustDesk优点 自建服务端。搭建在自己的云服务器就相当于独享高速带宽&#xff01;点对点通信。TCP…

程序从编译到运行

一、程序的编译流程&#xff08;以 C 语言为例&#xff09; 编译一个 C 程序从可以分为四个阶段&#xff1a;预处理 --> 编译&#xff08;生成汇编代码&#xff09;--> 汇编 --> 链接。 下面以大家最熟悉的 hello world 程序为例&#xff0c;编译器为 linux 下的 gcc…

C语言实现斐波那契数列的多种方法

斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称黄金分割数列&#xff0c;因数学家莱昂纳多斐波那契&#xff08;Leonardo Fibonacci&#xff09;以兔子繁殖为例子而引入&#xff0c;故又称为“兔子数列”。对于解决此类问题方法有四&#xff0c;前两…

代码随想录算法训练营第三十九天 | LeetCode 62. 不同路径、63. 不同路径 II

代码随想录算法训练营第三十九天 | LeetCode 62. 不同路径、63. 不同路径 II 文章链接&#xff1a;不同路径 不同路径II 视频链接&#xff1a;不同路径 不同路径II 1. LeetCode 62. 不同路径 1.1 思路 本题是个二维矩阵&#xff0c;因此 dp 数组也定义为二维的&…

select...for update 锁表了?

在MySQL中&#xff0c;事务A中使用select...for update where id1锁住了&#xff0c;某一条数据&#xff0c;事务还没提交&#xff0c;此时&#xff0c;事务B中去用select ... where id1查询那条数据&#xff0c;会阻塞等待吗&#xff1f; select...for update在MySQL中&#…

chatgpt 安卓版本提供google play商店版本太旧更新方法

多击play商店版本&#xff0c;开启开发者模式&#xff0c;再点击更新play商店。会自动下载最新版安装。记得开梯子。

太极培训机构展示服务预约小程序的作用如何

太极是适合男女老幼的&#xff0c;很多地方也有相关的学校或培训机构&#xff0c;由于受众广且不太受地域影响&#xff0c;因此对培训机构来说&#xff0c;除了线下经营外&#xff0c;线上宣传、学员获取和发展也不可少。 接下来让我们看下通过【雨科】平台制作太极教培服务预…

面试算法45:二叉树最低层最左边的值

题目 如何在一棵二叉树中找出它最低层最左边节点的值&#xff1f;假设二叉树中最少有一个节点。例如&#xff0c;在如图7.5所示的二叉树中最低层最左边一个节点的值是5。 分析 可以用一个变量bottomLeft来保存每一层最左边的节点的值。在遍历二叉树时&#xff0c;每当遇到新…

Apollo上车实践:打造安全、高效、舒适的出行体验

上车实践 概述自动驾驶车辆适配线控标准协议开环验证车辆 自动驾驶车辆集成了解传感器布置与连接了解车辆标定了解传感器标定循迹实践 自动驾驶测试与调车了解车辆安全操作流程了解实车控制调试了解实车定位调试 福利活动 主页传送门&#xff1a;&#x1f4c0; 传送 概述 通过…

C++设计模式_18_State 状态模式

State和Memento被归为“状态变化”模式。 文章目录 1. “状态变化”模式1.1 典型模式 2. 动机 (Motivation)3. 代码演示State 状态模式3.1 常规方式3.2 State 状态模式 4. 模式定义5. 结构( Structure )6. 要点总结7. 其他参考 1. “状态变化”模式 在组件构建过程中&#xf…

Apache ActiveMQ (版本 < 5.18.3) (CNVD-2023-69477)RCE修复方案/缓解方案

一、漏洞描述 Apache ActiveMQ 是美国阿帕奇&#xff08;Apache&#xff09;基金会的一套开源的消息中间件&#xff0c;它支持 Java 消息服务、集群、Spring Framework 等。 二、漏洞成因 ActiveMQ 默认开放了 61616 端口用于接收 OpenWire 协议消息&#xff0c;由于针对异常…

sqlite3 关系型数据库语言 SQL 语言

SQL(Structured Query Language)语言是一种结构化查询语言,是一个通用的,功能强大的关系型数据库操作语言. 包含 6 个部分: 1.数据查询语言(DQL:Data Query Language) 从数据库的二维表格中查询数据,保留字 SELECT 是 DQL 中用的最多的语句 2.数据操作语言(DML) 最主要的关…

视频下载工具Downie4 mac中文支持格式

Downie4 mac是一款视频下载工具。它支持下载各种视频网站上的视频&#xff0c;并且具有快速、稳定、易于使用的特点。 Downie支持下载各种视频网站上的视频&#xff0c;包括YouTube、Vimeo、Netflix、Hulu、Amazon等等。它具有快速、稳定的下载速度&#xff0c;可以帮助用户轻松…

HDFS架构介绍

数新网络_让每个人享受数据的价值浙江数新网络有限公司是一家开源开放、专注于云数据智能操作系统和数据价值流通的服务商。公司自主研发的DataCyber云数据智能操作系统&#xff0c;主要包括数据平台CyberData、人工智能平台CyberAI、数据智能引擎CyberEngine、数据安全平台Cyb…

手机app爬虫配置 (苹果手机)

近期在做某个项目,涉及到需要对手机app的进行数据爬取。在上一篇博文中,讲述了以模拟机为例的配置操作流程,这里将以苹果手机为例进行描述。 下面将讲述具体配置步骤 1、安装 抓包软件 fiddler (Fiddler | Web Debugging Proxy and Troubleshooting Solutions) ​ 下载后…

navicat15 恢复试用方法

1.运行&#xff0c;输入regedit&#xff0c;打开注册表 2.注册表中搜索 HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPremium&#xff0c;删除下面的Registration15XCS文件夹 3.注册表中再搜索 HKEY_CURRENT_USER\Software\Classes\CLSID 然后拉到文件夹目录的最后&#x…

实时视频混合和映射:Resolume Arena 6(专业的VJ)中文

Resolume Arena 6是一款专业的实时视频混合和映射软件&#xff0c;广泛应用于音乐表演、舞台演出、俱乐部活动等场合&#xff0c;打造令人惊叹的视觉效果和图像投影。它支持实时混合多个视频源&#xff0c;拥有视频映射功能以及提供多样实时效果和过渡效果&#xff0c;让用户能…

MySQL的MSI安装

MySQL的MSI安装 文章目录&#xff1a; MySQL的MSI安装材料准备&#xff1a;一、MySQL安装的准备工作二、MySQL的配置三、MySQL安装验证1、CMD命名验证2、MySQL 8.0 Command Line Client验证 材料准备&#xff1a; 1、x64或x86电脑 2、MySQL安装包 一、MySQL安装的准备工作 M…