Spring AOP的底层实现原理是?
动态代理
动态代理的实现方式?
JDK动态代理、CGLib
代理类:运行时生成的一个二进制字节码的类
实现方式差异
JDK: 需要实现接口(会实现目标类的接口);代理类由JDK类库直接生成的;调用方式:反射调用目标类
CGLib:不能为final(会继承目标类);代理类由第三方的ASM的字节码操作框架生成;调用方式:子类调用目标类(子类调用父类)
性能
JDK1.8之前,CGLib的性能更好,JDK反射调用性能差。
JDK1.8之后做了优化,性能相差无几。
Spring框架默认使用JDK动态代理,SpringBoot默认使用CGLib。