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相关推荐

  1. 【Groovy】Groovy 方法调用 ( Java 类成员及 setter 和 getter 方法设置 | Groovy 类自动生成成员的 getter 和 setter 方法 )

    文章目录 一.Java 类成员及 setter 和 getter 方法设置 二.Groovy 类自动生成成员的 getter 和 setter 方法 一.Java 类成员及 setter 和 gett ...

  2. 在Java中动态传参调用Python脚本

    最近,又接触到一个奇葩的接口,基于老板不断催促赶时间的情况下,在重写java接口和复用已有的python脚本的两条路中选择了后者,但是其实后者并没有好很多,因为我是一个对python的认识仅限于其名称 ...

  3. java中函数的调用,java中如何调用函数

    java动态调用函数,Java 中使用动态代码,java函数调用,java中如何调用函数 如何在 Java 中调用 C 函数 宗薇 [期刊名称]<网络新媒体技术> [年(卷),期]2000 ...

  4. Java中动态加载字节码的方法 (持续补充)

    文章目录 Java中动态加载字节码的方法 1.利用 URLClassLoader 加载远程class文件 2.利用 ClassLoader#defineClass 直接加载字节码 2.1 类加载 - ...

  5. 深入浅出JVM(五)之Java中方法调用

    方法调用 要知道Java中方法调用唯一目的就是确定要调用哪一个方法 方法调用可以分为解析调用和分派调用,接下来会详细介绍 非虚方法与虚方法 非虚方法: 静态方法,私有方法,父类中的方法,被final修 ...

  6. ironpython使用dictionary_在C#环境中动态调用IronPython脚本(一)

    本文讲述用C#调用Ironpython运行环境,解析并运行动态pyhton脚本.这种情况应用在那些需要滞后规定行为的场合,例如,动态计算项(计算引擎),用户可以自定义计算内容.计算公式等. 本文的代码 ...

  7. C# 中静态调用C++dll 和C# 中动态调用C++dll

    在最近的项目中,牵涉到项目源代码保密问题,由于代码是C#写的,容易被反编译,因此决定抽取核心算法部分使用C++编写,C++到目前为止好像还不能被很好的反编译,当然如果你是反汇编高手的话,也许还是有可能 ...

  8. Delphi中动态调用DLL的方法

    Delphi中动态调用dll的方法如下: function CallFunc(dllname, funcname: string; const param: array of const): DWOR ...

  9. java 怎么调用js代码_在Java中直接调用js代码

    JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码. 在Java中直接调用js代码 不能调用浏览器中定义的js函数,会抛出异常提示ReferenceError: " ...

最新文章

  1. 如果地府需要一个后台管理系统,你会如何设计?
  2. Trie树详解及其应用
  3. 小白袍 -- Chapter 1 Java中的Encode与Decode
  4. Java反射之将对象转成map
  5. java做的模板商城_不吹不黑4个超火Java开源项目,接私活、练手、必备项目
  6. table tr th td
  7. vscode怎样导入数据_【Python开发】用VSCode+Jupyter notebook 编写 Python
  8. Linux查找字符串包含在某目录所有文件中
  9. 解决hadoop no dataNode to stop问题
  10. Hibernate 入门
  11. vue 钉钉授权第三方WEB网站扫码登录功能
  12. 五、eclipse如何创建一个ftl(FreeMarker)的文件和设置ftl文件的显示风格(ftl文件高亮显示)
  13. Coolie记住用户名和密码
  14. 【stata】如何快速上手stata软件
  15. Nature封面:基因突变才是衰老的罪魁祸首?体细胞突变越快,寿命越短
  16. OneTab插件的替代产品-OneTab Pro
  17. 训练数据出现TypeError: 'numpy.float64' object cannot be interpreted as an integer错误
  18. VMware虚拟机软件安装国产操作系统 统信 UOS V20 1050e 手把手保姆教程
  19. 时间触发嵌入式系统设计模式 读书笔记
  20. 计算机组装与维修期末C卷,计算机组装与维修期末考试试卷

热门文章

  1. CSS文本字体与背景样式
  2. 西游记中的孙悟空其实早就死了
  3. bim综合免费工具:Revit中公制门窗改为幕墙嵌门窗
  4. iPad白苹果怎么办?
  5. 武汉青少年计算机编程,武汉中小学生编程学校排名
  6. 【随手记】浏览器的高级API
  7. 【Vulnhub】之Deathnote
  8. split(|)正确使用方法split(\\|)
  9. 08重编终极版《东邪西毒:终极版》DVD粤语中字
  10. 文本编辑器vi--常用命令查阅版(记得收藏)