Java中动态调用setter以及getter
0x00 前言
对于非专业程序员的安全人员来说,因为没有代码项目的积累,很多知识体系都不完善,所以有必要在一些常用的内容进行学习的总结。
在很多的调用链中都会用到**“动态调用setter以及getter”**这个知识点,比如经典的CB链,fastjson调用链等。为了避免进行重复的分析,所以单独拎出来这个进行详解,查漏补缺,如有遗漏或者错误的地方,还请斧正。
0x01 java中的Bean
首先占用一点位置说一下Bean是什么,Bean就是类。很简单,但是如果不知道,一些文章你就看不太懂。
0x02 静态调用setter,getter方法
在Java的类中(bean)中,通常属性都是会进行封装的,会对外暴露setter,getter方法。我们可以通过setter或者getter方法去对属性进行赋值,或者读取属性的值。
封装可以参考,虽然很浅,简单的了解即可。:封装-菜鸟教程
这里先建一个Person类,展示一下封装。位置:JavaBasis/src/main/java/com/dudu/cls/Person.java

在已知对象的setter和getter我们可以通过这样的方式来进行调用:
测试Demo位置:JavaBasis/src/main/java/com/dudu/demo/PersonDemo.java

0x03 动态调用setter以及getter
有这样一种需求,如果我需要进行动态的调用setter和getter方法,并且,我想要通过外部输入的方式来实现这个过程,那么有什么方式可以做到呢。请看下面方式
1.通过反射实现
反射是所有动态调用setter和getter方法的基础,也就是底层依赖的内容,不论是CB,还是fastjson都是万变不离其宗的。
这里通过自己写一个自定义的方法来实现动态的setter和getter对属性进行赋值。
1.1 set方法
首先来看代码,位置在./JavaBasis/src/main/java/com/dudu/tools/MyInvoke.java
通过自己写的一个比较简单的demo,就可以实现通过输入属性名进行setter赋值

1.2 get方法
getter方法是同理的,位置也是在./JavaBasis/src/main/java/com/dudu/tools/MyInvoke.java
通过动态传入属性的名称,从而获取属性的值的操作

1.3 Demo测试
测试demo位置:com\dudu\demo\MyInvokeDemo.java

2.PropertyUtils
PropertyUtils是commons-beanutils库提供的一个工具类,通过此类可以快速的进行适配使用动态调用setter以及getter方法,不需要自己处理过多的Bug。
1.1 PropertyUtils的基本使用
通过PropertyUtils这个类中提供的方法就可以实现动态的调用Bean的setter和getter方法,只需要名称即可。
首先需要通过maven导入commons-beanutils库
<dependencies><dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId><version>1.9.4</version></dependency>
</dependencies>
PropertyUtils有两个方法,一个是setProperty,一个是getProperty。这里看一下demo,位置:JavaBasis/src/main/java/com/dudu/demo/PropertyUtilsDemo.java
通过setProperty方法调用了指定属性的setter方法,以及getProperty方法获取了对应属性的值:

下面是运行结果。

1.2 PropertyUtils不仅仅是操作属性的值
PropertyUtils不仅仅是操作属性的值,这句话怎么理解,PropertyUtils可以直接操作以setter,或者getter打头的方法。
这里为了区分,创建了Person2,内容如下图所示,位置:JavaBasis/src/main/java/com/dudu/cls/Person2.java
这个类中,有一个以get打头,并且不是操作属性的方法。

通过PropertyUtils.getProperty进行调用。位置:JavaBasis/src/main/java/com/dudu/demo/PropertyUtilsDemo2.java

那么如果在get打头的方法中,出现可以利用的内容,那么就可以走PropertyUtils库。
以上
相关文章:
Java中动态调用setter以及getter
0x00 前言 对于非专业程序员的安全人员来说,因为没有代码项目的积累,很多知识体系都不完善,所以有必要在一些常用的内容进行学习的总结。 在很多的调用链中都会用到**“动态调用setter以及getter”**这个知识点,比如经典的CB链&a…...
基于 NeRF 的 App 上架苹果商店!照片转 3D 只需一部手机,网友们玩疯了
前言 只用一部手机,现实中的 2D 照片就能渲染出 3D 模型? 没错,无需再手动上传电脑或安装激光雷达,苹果手机自带 App 就能生成 3D 模型。 这个名叫 Luma AI 的“NeRF APP”,正式上架 App Store 后爆火: 小…...
C++类与对象(中)
✅<1>主页:我的代码爱吃辣 📃<2>知识讲解:C 🔥<3>创作者:我的代码爱吃辣 ☂️<4>开发环境:Visual Studio 2022 💬<5>前言:C类中一共有六个默认成员函…...
计算机软件技术基础复习
数据结构 文章目录数据结构第一节 数据结构的基本概念第二节 线性结构线性表顺序表和链表的特点实现循环队列第三节 非线性结构树操作系统操作系统概述进程和程序存储空间的组织数据库技术数据库设计软件技术软件生命周期第一节 数据结构的基本概念 数据结构:指相互…...
python爬虫--beautifulsoup模块简介
BeautifulSoup 的引入 我们学习了正则表达式的相关用法,但是一旦正则写的有问题,可能得到的就不是我们想要的结果了,而且对于一个网页来说,都有一定的特殊的结构和层级关系,而且很多标签都有 id 或 class 来对作区分&…...
Swfit Copy On Write 原理解析
1. Swift Copy On write 原理是什么 Swift 中的 Copy On Write (COW) 技术是一种内存优化技术,其原理是在需要修改数据时才进行拷贝,以避免不必要的内存消耗。 COW 的实现主要依赖于 Swift 中的结构体和类的特性。对于结构体而言,它是值类型…...
【面试题】经典面试题:让 a == 1 a == 2 a == 3 成立?
一、问题解析 if (a == 1 && a == 2 && a == 3) {console.log(Win) } 复制代码 如何打印除Win? 看到题目的第一眼,我是蒙蔽的.怎么可能会有如此矛盾的情况发生呢?就相当于一个人怎么可能即是小孩,又是成年人,还是老年人呢? 冷静下来,发现一些端倪。...
我是歌手-C语言
“我是歌手”是成名歌手之间的比赛节目,2轮比赛中观众支持率最低者出局。 这里我们假设有n个歌手进行了m轮比赛,请求出局者(m轮总分最低者)。 输入n个歌手(编号依次为1,2,......n)…...
Acwing---112.雷达设备
雷达设备1.题目2.基本思想3.代码实现1.题目 假设海岸是一条无限长的直线,陆地位于海岸的一侧,海洋位于另外一侧。 每个小岛都位于海洋一侧的某个点上。 雷达装置均位于海岸线上,且雷达的监测范围为 d,当小岛与某雷达的距离不超…...
SSJ-21A AC220V静态【时间继电器】
系列型号: SSJ-11B静态时间继电器;SSJ-21B静态时间继电器 SSJ-21A静态时间继电器;SSJ-22A静态时间继电器 SSJ-22B静态时间继电器SSJ-42B静态时间继电器 SSJ-42A静态时间继电器SSJ-41A静态时间继电器 SSJ-41B静态时间继电器SSJ-32B静态时间继电…...
m序列发生器——Verilog设计
引言 本篇文章利用Verilog编写一个m序列发生器模块。本文会给出具体的设计、测试源码。 设计说明 模块功能说明: 支持任意位宽的随机数生成;支持本原多项式配置;支持初始种子配置;设计环境: 设计语言:Verilog HDL 设计验证平台:MATLAB R20222a、Vivado 2018.3 m 序列…...
Mysql—触发器
触发器 简介 触发器用于直接在某种操作后(数据的增删改查等),通过事件执行设置触发器时的 sql 语句,具有原子性。 可通过 sql 语句直接编写,关键词:CREATE TRIGGER 触发器名称。 例如:在表 st…...
DVWA靶场通关和源码分析
文章目录一、Brute Force1.low2、medium3、High4、Impossible二、Command Injection1、Low2、Medium3、High三、CSRF1、Low2、Medium3、High4、Impossible四、File Inclusion1、Low2、Medium3、High五、File Upload1、Low2、Medium3、High4、Impossible六、 SQL注入1、Low2、Me…...
RocketMQ5.0.0消息存储<二>_消息存储流程
目录 一、消息存储概览 二、Broker接收消息 三、消息存储流程 1. DefaultMessageStore类 2. 存储流程 1):同步与异步存储 2):CommitLog异步存储消息 3):提交消息(Commit) 四、参考资料 一、消息存储概览 如下图所…...
【单片机方案】蓝牙体温计方案介绍
蓝牙体温计方案的工作原理利用了温度传感器输出电信号,直接输出数字信号或者再将电流信号(模拟信号)转换成能够被内部集成的电路识别的数字信号,然后通过显示器(如液晶、数码管、LED矩阵等)显示以数字形式的温度,能记录、读取被测温度的最高值…...
React 的受控组件和非受控组件有什么不同
大家好,我是前端西瓜哥,今天我们来看看 React 的受控组件和非受控组件有什么不同。 受控组件 受控组件,指的是将表单元素的值交给组件的 state 来保存。 例子: import ./styles.css import { useState } from reactconst App …...
【逐步剖C】-第六章-结构体初阶
一、结构体的声明 1. 结构体的基本概念 结构体是一些值的集合,这些值称为成员变量。结构体的每个成员可以是不同类型的变量。结构体使得C语言有能力描述复杂类型。 如学生,有姓名、学号、性别等;如书,有作者,出版日期…...
Java 并发在项目中的使用场景
1、并发编程的三个核心问题:(1)分工:所谓分工指的是如何高效地拆解任务并分配给线程(2)同步:而同步指的是线程之间如何协作(3)互斥:互斥则是保证同一时刻只允…...
15.面向对象程序设计
文章目录面向对象程序设计15.1OOP:概述继承动态绑定15.2定义基类和派生类15.2.1定义基类成员函数与继承访问控制与继承15.2.2定义派生类派生类对象及派生类向基类的类型转换派生类构造函数派生类使用基类的成员继承与静态成员派生类的声明被用作基类的类防止继承的发…...
Element UI框架学习篇(一)
Element UI框架学习篇(一) 1.准备工作 1.1 下载好ElementUI所需要的文件 ElementUI官网 1.2 插件的安装 1.2.1 更改标签的时实现自动修改 1.2.2 element UI提示插件 1.3 使用ElementUI需要引入的文件 <link rel"stylesheet" href"../elementUI/element…...
WinHex实战:从磁盘底层到数据恢复的完整指南
1. WinHex入门:认识这款数据恢复利器 第一次接触WinHex时,我被它黑底绿字的界面震撼到了——这简直就是黑客电影里的标配工具!作为X-Ways公司开发的专业十六进制编辑器,WinHex远不止是个简单的磁盘查看器。记得有次同事误删了重要…...
从零到一:Lmbench 性能测试实战与结果深度解读
1. 为什么你需要Lmbench性能测试 第一次听说Lmbench时,我也和大多数新手一样困惑:系统性能测试工具那么多,为什么非要选这个老古董?直到在服务器部署项目时连续遇到三次性能瓶颈,我才真正理解它的价值。那次我们用某款…...
PHPStudy本地开发,用上Redis 5的Stream和HyperLogLog到底有多香?
PHPStudy本地开发中Redis 5的Stream与HyperLogLog实战指南 Redis作为高性能的内存数据库,在PHP开发中扮演着重要角色。当我们在本地开发环境使用PHPStudy时,默认安装的Redis 3.0.504版本功能有限,无法体验Redis 5引入的强大新特性。本文将深…...
JavaScript零基础到精通
📚 教程定位与目标 本教程专为零基础学习者设计,覆盖从语法入门到现代JavaScript精通的完整路径,内容严格遵循ES2026标准,融合MDN、freeCodeCamp、W3Schools权威结构,并适配中文学习者习惯。…...
Data Storage and Computation
Data Storage and Computation 数据存储与计算假设一张表有 3 个字段:id BIGINT(8 字节 / 条) name VARCHAR(20)(实际平均 10 字节 / 条) age TINYINT(1 字节 / 条)单行实际数据占用࿱…...
如何在Windows上轻松安装ViGEmBus虚拟手柄驱动解决游戏兼容性问题
如何在Windows上轻松安装ViGEmBus虚拟手柄驱动解决游戏兼容性问题 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 你是否曾经遇到过这样的困扰:手…...
虞城装修公司选哪家专业?业主正确对比装修公司的方法,看完不踩坑
在虞城准备装修的业主,大多都会纠结一个问题:虞城装修公司这么多,到底哪家更专业? 很多人都是第一次装修,不懂行、不会分辨,只会看价格、看广告,很容易被低价套路、中途增项、工艺偷工减料坑到崩…...
ARMv8 A64指令集SIMD与浮点运算优化指南
1. A64指令集SIMD与浮点运算架构解析在ARMv8架构中,A64指令集的SIMD(单指令多数据流)和浮点运算单元构成了高性能计算的核心引擎。这套指令集的设计体现了现代处理器架构中数据级并行(DLP)的精髓——通过单条指令同时处…...
深入解析Arm架构TLB维护机制与A64指令集
1. TLB维护机制基础解析在处理器架构中,TLB(Translation Lookaside Buffer)是内存管理单元(MMU)的核心组件,负责缓存虚拟地址到物理地址的转换结果。当CPU需要访问内存时,首先会查询TLB获取地址…...
代码所有权的悖论:集体智慧与个人责任的边界
代码世界的身份迷局在软件测试的日常工作中,我们时常会陷入这样的困惑:当面对一行引发系统崩溃的代码时,究竟该追溯到最初编写它的开发者,还是问责于后续不断迭代维护的团队?当一个历经数十人之手、跨越数年周期的模块…...
