为什么流行的框架在内部使用字节码操作?
我听说许多框架(Struts、Spring、Hibernate、AspectJ)在内部使用字节码操作。使用字节码操作的令人信服的理由是什么?我期待一个答案,至少包含每个特定框架的用例。
I heard that many frameworks (Struts, Spring, Hibernate, AspectJ) use bytecode manipulation internally. What are the compelling reasons to use bytecode manipulation? I'm expecting a answer with at least a use-case for each particular framework.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这些框架操纵类的字节码,以便它们可以向其中添加对其功能的支持。例如,Hibernate 可以将代码写入类的 getter/setter 中,以帮助它跟踪实体何时已更新(变脏)和/或返回包含延迟加载代码的子实体的代理。
Aspectj 操作字节码以添加您请求它强制执行的方面。例如,如果您想向类的所有方法添加建议以在调用它们时进行日志记录,则aspectj 可以向每个方法添加字节码(执行该日志记录)。
These frameworks manipulate the bytecode of your classes so that they can add support for their features into them. For example, Hibernate may code into getters/setters of a class in order to help it track when the entity has been updated (become dirty) and/or to return proxies of sub-entities that contain code to do lazy-loading.
Aspectj manipulates bytecode in order to add the aspects that you have requested it to enforce. For example, if you want to add advice to all the methods of a class to log when they are invoked, then aspectj may add bytecode (that performs that logging) to each method.