内容来自《Java Web 程序员面试笔试宝典》

【出现频率】★★★★☆ 【学习难度】★★☆☆☆

答案:AOP的实现原理是代理模式,代理模式又分为静态代理和动态代理,再强调一下,Spring AOP是基于动态代理实现的,而AspectJ AOP基于静态代理模式实现。

Spring AOP仅支持方法级别的PointCut,它运行时在内存中动态生成 AOP 代理类(也称为运行时增强),包括 JDK 动态代理和 CGLIB 动态字节码技术。

AspectJ AOP功能更强大,提供了完全的AOP支持,它还支持属性级别的PointCut,但也更复杂。它的静态代理使用框架提供的命令进行编译,从而在编译阶段就可以生成 AOP 代理类(也称为编译时增强)。