我遇到一个问题,我需要遍历一个对象图并挑选出一个特定的属性值。我的原始解决方案缓存了一个属性名称的链表,需要应用这些属性名称才能从对象图中的 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/