问题描述
spring,hibernate都有用到cglib, javassist来修改java字节码但是我不是很清楚为什么要这样做?以及他们是怎么做到的是在运行时还是编译时修改的?他们怎么确保修改后的语义是正确的呢
解决方案
javassist没有用过,说说cglib在AOP中,Java原生自带的模式需要依赖于接口,但是一些实现里面,是通过继承来实现的,压根就没有接口,或者只有很底层的接口。这种场景下,就没办法通过接口的这种动态代理方式来实现动作拦截。所以只好依赖于cglib。当然,最优雅的还是通过接口的方式,cglib只不过是无奈的选择罢了。另外,cglib是运行时动态修改字节码的。
时间: 2025-01-01 15:45:48