java - PropertyUtils 性能

标签 java performance reflection apache-commons

我遇到一个问题,我需要遍历一个对象图并挑选出一个特定的属性值。我的原始解决方案缓存了一个属性名称的链表,需要应用这些属性名称才能从对象图中的 A 点到达 B 点。然后我使用 apache commons PropertyUtils遍历调用 getProperty(Object bean, String name) 的链表,直到我到达 B 点。

我的问题是,与可能为每个步骤缓存 Method 对象相比,这将如何执行。 propertyUtils 到底在做什么?它是否做了很多反射(reflection)/繁重的工作?

最佳答案

您不需要手动横向图,因为新版本的 commons beanutils 也支持像 bean1.prop1.prop2 这样的表达式。

关于性能,如果每个表达式只执行一次,propertyutils 实现就很好,因为一定程度的反射是绝对必要的。

如果多次调用每个表达式,您可以获得更真实的性能改进。然后缓存要执行的 final方法可以改善结果,因为您只为表达式做了一次大反射。

如果你多次使用这个表达式,你可以看看支持“编译表达式”的OGNL。

关于java - PropertyUtils 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2228542/

相关文章:

java - 替代新方法以避免重复代码

java - 将 Webm 或 m4a 文件转换为 mp3

java - 有没有办法在从 Java 中的输入流读取时将字节更改为整数?

java - 如何通过缓冲完全并行化 Java8 流?

java - 开发代码时如何模拟防火墙和代理?

performance - 是否有用于在没有(慢速)COM API(互操作)的情况下操作 Excel .xlsb (BIFF12) 文件的库?

c++ - boost boost::iterator_facade 取消引用

c# - 这个反射代码有什么问题? GetFields() 返回一个空数组

xml - Ruby:attr_accessor 生成的方法 - 如何迭代它们(以 to_s - 自定义格式)?

c# - 无法使用静态方法、实例方法等作为 .NET 中属性的参数的原因是什么?