为啥流行的框架在内部使用字节码操作?

Posted

技术标签:

【中文标题】为啥流行的框架在内部使用字节码操作?【英文标题】:Why do popular frameworks use bytecode manipulation internally?为什么流行的框架在内部使用字节码操作? 【发布时间】:2011-01-31 05:13:28 【问题描述】:

我听说许多框架(Struts、Spring、Hibernate、AspectJ)在内部使用字节码操作。使用字节码操作的令人信服的理由是什么?我期待每个特定框架至少有一个用例的答案。

【问题讨论】:

【参考方案1】:

这些框架会操纵您的类的字节码,以便它们可以在其中添加对其特性的支持。例如,Hibernate 可以编码到类的 getter/setter 中,以帮助它跟踪实体何时更新(变脏)和/或返回包含代码的子实体的代理以进行延迟加载。

Aspectj 操作字节码以添​​加您要求它强制执行的方面。例如,如果您想在类的所有方法中添加建议以在调用它们时进行记录,那么 aspectj 可能会向每个方法添加字节码(执行该记录)。

【讨论】:

是的,我明白你的意思,但是 Spring 框架和 struts2 如何在其框架中使用字节码操作

以上是关于为啥流行的框架在内部使用字节码操作?的主要内容,如果未能解决你的问题,请参考以下文章

第五篇 java字节码操作

字节码基于javassist的第一个案例helloworld

美食菜谱

为啥两个 Uni V3 池有不同的字节码?

Javassist/ASM 框架比较

Javassist/ASM 框架比较