当前位置: 首页 > news >正文

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

以上

http://www.lryc.cn/news/277.html

相关文章:

  • 基于 NeRF 的 App 上架苹果商店!照片转 3D 只需一部手机,网友们玩疯了
  • C++类与对象(中)
  • 计算机软件技术基础复习
  • python爬虫--beautifulsoup模块简介
  • Swfit Copy On Write 原理解析
  • 【面试题】经典面试题:让 a == 1 a == 2 a == 3 成立?
  • 我是歌手-C语言
  • Acwing---112.雷达设备
  • SSJ-21A AC220V静态【时间继电器】
  • m序列发生器——Verilog设计
  • Mysql—触发器
  • DVWA靶场通关和源码分析
  • RocketMQ5.0.0消息存储<二>_消息存储流程
  • 【单片机方案】蓝牙体温计方案介绍
  • React 的受控组件和非受控组件有什么不同
  • 【逐步剖C】-第六章-结构体初阶
  • Java 并发在项目中的使用场景
  • 15.面向对象程序设计
  • Element UI框架学习篇(一)
  • 【算法】【C语言】
  • 【✨十五天搞定电工基础】基本放大电路
  • MyBatis 入门教程详解
  • shiro、springboot、vue、elementUI CDN模式前后端分离的权限管理demo 附源码
  • 智能优化算法——粒子群优化算法(PSO)(小白也能看懂)
  • Lesson 6.4 逻辑回归手动调参实验
  • Oracle数据库入门大全
  • C语言操作符详解(下)
  • 【五六七人口普查】我国省市两级家庭户住房状况
  • 大数据框架之Hadoop:入门(二)从Hadoop框架讨论大数据生态
  • 负载均衡反向代理下的webshell上传+apache漏洞