一尘不染

休眠-字节码检测和字节码增强之间的区别?

hibernate

我正在使用Hibernate
4.2并构建时间字节码工具来解决出现在@OneToOne关系上的懒惰问题和@Lobhttps://developer.jboss.org/wiki/SomeExplanationsOnLazyLoadingone-
to-one)

您知道之间有什么区别吗?

Hibernate字节码检测工具:http :
//docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch20.html#performance-
fetching-lazyproperties

Hibernate字节码增强功能:http :
//docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch20.html#bytecode-
enhancement

因为在hibernate文档中是这样写的:

EnhancementTask旨在替代InstrumentTask。此外,它也与InstrumentTask不兼容,因此任何现有的已检测类都需要再次从源构建。

我可以通过使用字节码检测解决问题,但不能通过使用字节码增强来解决。你知道为什么吗 ?

也许这个新功能没有得到充分开发?

感谢您的帮助。


阅读 270

收藏
2020-06-20

共1个答案

一尘不染

答案是字节码增强的完成方式。让我们看看两种情况下会发生什么

  1. 字节码检测:在“运行时”期间将字节码添加到Java类。它不是真正在运行时,而是在Java类的“加载”时。此外,您可以详细阅读这篇文章

  1. 字节码增强:字节码增强可以在运行时或构建时(脱机)执行。在运行时执行增强时,持久类在加载时会得到增强。脱机执行增强时,将在后编译步骤中增强类文件。

在字节码增强的大多数情况下,它们是在后期编译时完成的。如果您的Hibernate字节码增强就是这种情况,那么是的,更改代码的显而易见的选择是字节码检测。

2020-06-20