BeanUtils与ReflectionToStringBuilder的性能(用于Bean类)

Pha*_*a K 7 java reflection performance javabeans apache-commons-beanutils

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

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

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

我想根据上面提到的标准知道哪些更好.据我所知,反射是一项繁重的操作,但更多细节和对这两种选项的深入了解将有助于我选择最佳解决方案.

jt.*_*jt. 10

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

我们也使用BeanUtils.describe(),但用于其他目的.BeanUtils用于PropertyUtilsBean保存已执行内省的bean的内部缓存的用途.这似乎是这将使其性能优势比其他,但在reflectionToString源有点闲逛,似乎因为它最终依赖于实施java.lang.Class,缓存进场那里.

要么看起来像一个可行的选择,但BeanUtils.describe()会返回一个属性Map,其中reflectionToString将返回一个格式化的String.我想这取决于你想要对输出做什么.

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


asi*_*sio 9

就个人而言,我更喜欢使用Eclipse/IntelliJ生成toString()方法,然后根据需要进行修改(仅包含重要字段).

右键单击 - > Source - > Generate toString().选择字段.完成.

  1. 它甚至比编写Builder代码花费的时间更少.
  2. 它会执行得更快.
  3. 它不使用permgen空间(反射可能倾向于吃掉permgen)

如果你担心表现,那就是我走的路.