我听说很多框架(Struts,Spring,Hibernate,AspectJ)在内部使用字节码操作。使用字节码操作有哪些令人信服的理由?我期待每个特定框架至少有一个用例的答案。
答案 0 :(得分:11)
这些框架操纵类的字节码,以便他们可以在其中添加对其功能的支持。例如,Hibernate可以编写成类的getter / setter,以帮助它跟踪实体何时被更新(变脏)和/或返回包含代码的子实体的代理进行延迟加载。
Aspectj操纵字节码以添加您请求它强制执行的方面。例如,如果要在调用类时向类的所有方法添加建议,则aspectj可以向每个方法添加字节码(执行该日志记录)。