gpt4 book ai didi

java - BeanUtils 与 ReflectionToStringBuilder 的性能对比(用于 Bean 类)

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:02:47 43 4
gpt4 key购买 nike

我的 Web 应用程序中有大量 Java bean 类,我正试图找到一种简单的方法来在这些 bean 中实现 toString() 方法。 toString() 方法将用于记录整个应用程序,并且应该打印 bean 中所有属性的属性值对。

我正在尝试两种选择:
1. BeanUtils.describe() (Apache commons-beanutils)
2. ReflectionToStringBuilder.toString()(Apache 通用语言)

由于这是一个预期具有高流量的 Web 应用程序,因此实现必须是轻量级的,并且不应影响性能。 (内存使用、处理器使用等是主要考虑因素)。

我想知道根据上述标准,其中哪些表现更好。据我所知,反射是一项繁重的操作,但更多细节和对这两个选项的洞察将帮助我选择最佳解决方案。

最佳答案

我们在对象的 toString() 方法中使用 ToStringBuilder.reflectionToString()。我们在生产环境中这样运行没有遇到任何问题。诚然,我们很少使用 toString() 方法。

我们也使用 BeanUtils.describe(),但用于另一个目的。 BeanUtils 使用 PropertyUtilsBean 保留已对其执行内省(introspection)的 bean 的内部缓存。看起来这会给它带来比另一个更好的性能优势,但是在 reflectionToString 源代码中稍微探索了一下,似乎因为它最终依赖于 java.lang.Class 的实现,所以缓存也在那里发挥作用。

两者看起来都是可行的选择,但 BeanUtils.describe() 将返回一个属性映射,其中 reflectionToString 将返回一个格式化的字符串。我想这取决于你想对输出做什么。

我建议,如果您的应用程序严重依赖于对对象调用 toString(),那么拥有一个特定的实现可能会更有益。

关于java - BeanUtils 与 ReflectionToStringBuilder 的性能对比(用于 Bean 类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5656843/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com