Java中动态调用setter以及getter

news/2024/3/29 14:44:30/文章来源:https://blog.csdn.net/qq_36869808/article/details/128960982

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库。

以上

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python语言零基础入门教程(九)

Python pass 语句 Python pass 是空语句&#xff0c;是为了保持程序结构的完整性。 pass 不做任何事情&#xff0c;一般用做占位语句。 Python 语言 pass 语句语法格式如下&#xff1a; pass测试实例&#xff1a; #!/usr/bin/python # -*- coding: UTF-8 -*- # 输出 Pytho…

线程池小结

什么是线程池 线程池其实就是一种多线程处理形式&#xff0c;处理过程中可以将任务添加到队列中&#xff0c;然后在创建线程后自动启动这些任务。这里的线程就是我们前面学过的线程,这里的任务就是我们前面学过的实现了Runnable或Callable接口的实例对象; 为什么使用线程池 …

leetcode刷题之背包问题(01背包)

01 背包 概念&#xff1a;有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]weight[i]weight[i]&#xff0c;得到的价值是value[i]value[i]value[i]。每件物品只能用一次&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 方法1&#xff1a;暴力回溯…

FPGA时序约束与分析 --- 实例教程(1)

注意&#xff1a; 时序约束辅助工具或者相关的TCL命令&#xff0c;都必须在 open synthesis design / open implemention design 后才能有效运行。 1、时序约束辅助工具 2、查看相关时序信息 3、一般的时序约束顺序 1、 时序约束辅助工具&#xff08;1&#xff09;时序约束编辑…

微服务负载均衡器Ribbon

目录 什么是Ribbon 客户端的负载均衡 服务端的负载均衡 常见负载均衡算法 Nacos使用Ribbon 添加LoadBalanced注解 修改controller Ribbon负载均衡策略 IRule AbstractLoadBalancerRule 修改默认负载均衡策略 自定义负载均衡策略 配置自定义的策略 饥饿加载 Ribbo…

【golang】1797. 设计一个验证系统

你需要设计一个包含验证码的验证系统。每一次验证中&#xff0c;用户会收到一个新的验证码&#xff0c;这个验证码在 currentTime 时刻之后 timeToLive 秒过期。如果验证码被更新了&#xff0c;那么它会在 currentTime &#xff08;可能与之前的 currentTime 不同&#xff09;时…

C语言经典编程题100例(1-20)

1、练习2-1 Programming in C is fun!本题要求编写程序&#xff0c;输出一个短句“Programming in C is fun!”。输入格式:本题目没有输入。输出格式:在一行中输出短句“Programming in C is fun!”。代码&#xff1a;#include<stdio.h> int main() {printf("Progra…

Java中类是什么

类(class)是构造对象的模板或蓝图。 我们可以将类想象成制作小甜饼的模具&#xff0c;将对象想象为小甜饼。由类构造(construct)对象的过程称为创建类的实例(instance)。 正如前面所看到的&#xff0c;用Java 编写的所有代码都位于某个类里面。 标准 Java 库提供了几千个类&a…

bcript 算法

一、简介 今天要给大家介绍的一种“加密”算法叫做 bcrypt&#xff0c;bcrypt 是由 Niels Provos 和 David Mazires 设计的密码哈希函数&#xff0c;他是基于 Blowfish 密码而来的&#xff0c;并于 1999 年在 USENIX 上提出。 除了加盐来抵御 rainbow table 攻击之外&#xf…

尚硅谷电商数仓5.0(华为云服务器)主机初期基本配置

文章目录服务器配置信息&#xff1a;注意事项&#xff1a;1.购买注意事项&#xff1a;2.后期使用注意事项&#xff1a;三台主机的基本配置服务器配置信息&#xff1a; 使用了两个账号&#xff0c;账号1买了两个服务器&#xff0c;一台4核8G&#xff0c;一台2核4G&#xff0c;账…

hgame2023 WebMisc

文章目录Webweek1Classic Childhood GameBecome A MemberGuess Who I AmShow Me Your BeautyWeek2Git Leakagev2boardSearch CommodityDesignerweek3Login To Get My GiftPing To The HostGopher Shopweek4Shared DiaryTell MeMiscweek1Where am I神秘的海报week2Tetris Master…

Qml学习——基本控件

最近在学习Qml&#xff0c;但对Qml的各种用法都不太熟悉&#xff0c;总是会搞忘&#xff0c;所以写几篇文章对学习过程中的遇到的东西做一个记录。 学习参考视频&#xff1a;https://www.bilibili.com/video/BV1Ay4y1W7xd?p1&vd_source0b527ff208c63f0b1150450fd7023fd8 目…

蓝桥杯刷题023——机器人塔(DFS)

2016国赛 题目描述 X 星球的机器人表演拉拉队有两种服装&#xff0c;A 和 B。 他们这次表演的是搭机器人塔。 类似&#xff1a; A B B A B A A A B B B B B A B A B A B B A 队内的组塔规则是&#xff1a; A 只能站在 AA 或 BB 的肩上。 B 只能站在 AB 或 BA 的肩上。 你的任务…

网络通信协议是什么?

网络通信基本模式 常见的通信模式有如下2种形式&#xff1a;Client-Server(CS) 、 Browser/Server(BS) 实现网络编程关键的三要素 IP地址&#xff1a;设备在网络中的地址&#xff0c;是唯一的标识。 端口&#xff1a;应用程序在设备中唯一的标识。 协议: 数据在网络中传输的…

Python-第二天 Python基础语法

Python-第二天 Python基础语法一、 字面量1.1 常用的值类型1.1.1 字符串&#xff08;string&#xff09;二、注释2.1 注释的作用2.2 注释的分类三、变量3.1 什么是变量3.2 变量的特征四、数据类型4.1 数据类型4.2 type()语句4.3 type()语句的使用方式4.4 变量有类型吗&#xff…

企业数字化转型的产品设计思路

数字化转型的核心是全面重塑企业的管理模式和经营模式&#xff0c;是迈向数字经济时代的方式。一、到底什么是数字化转型&#xff1f;数字化转型并不神秘。数字化转型是一种经营方式、一种经营理念&#xff0c;是将企业相关的人、物料、设备、资金等要素进行系统运转&#xff0…

中国网站安全形式风险报告

声明 本文是学习2017中国网站安全形势分析报告. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 网站漏洞检测分析 网站漏洞的整体形势可以从两个角度分析&#xff1a;一是网站安全检测的自动扫描结果统计&#xff0c;二是网站被报告漏洞情况的统计。…

浅谈监控易运维系统在金融信创国产化中的使用

自2019年&#xff0c;国家明确信创产业将成为拉动经济发展的重要途径和崭新动能以来&#xff0c;全行业进入一个高速发展新阶段。此前倡导的“28”安全可控体系&#xff0c;其中在8大基础行业中,金融行业信创产品推广成为重中之重。金融行业信创&#xff0c;是为解决行业本质安…

全息存储:名气大于实力的存储技术?

全息存储和玻璃存储、DNA存储并称当前三大数据存储前沿技术&#xff0c;笔者前面已经写过玻璃存储和DNA存储的文章&#xff08;参见《玻璃存储&#xff0c;数字时代的罗塞塔石碑》、《DNA存储&#xff1a;数据存储的终极解决之道》&#xff09;&#xff0c;自然也不能缺了全息存…

ASO优化之如何进行榜单优化

ASO优化有&#xff1a;搜索优化&#xff0c;榜单优化&#xff0c;转化率优化。今天我们主要来讲讲苹果应用商店的榜单优化。 榜单优化的核心内容就是提高应用商城的排名&#xff0c;把我们的APP提升到显眼的位置&#xff0c;增加曝光率&#xff0c;提升APP的下载量。 那我们具…