以前在 Spring AOP 应用篇,讲述了 AOP 的使用,这一篇来说一些 Spring AOP的实现原理。java
Spring 主要经过两种技术来实现 AOP,Java 动态代理 和 CGLib 动态代理设计模式
因为知识点比较多,单独写来一篇文章,参考 设计模式之动态代理框架
参考 CGLib 动态代理工具
既然有两种技术能够实现,那么实际运用时,到底选择的是哪种呢?post
默认的选择策略是性能
实际应用中常常遇到这样的状况,那么这多个AOP的执行顺序是怎么样的呢,答案是链式调用设计
在使用 Spring AOP 的过程当中,咱们常常用的 Aspectj的注解。好比 @Aspect、@Pointcut、@Before、@After等代理
哪一个这个 Aspectj 是什么呢接口
Aspectj 也是一个 AOP 框架,与 Spring AOP不一样的是,它不是经过动态代理实现的。而是在编译时,就把代理方法植入到目标方法中get
Spring AOP 虽然引用了Aspectj的一些核心概念,好比Aspect、advice、joinpoint等,也使用了AspectJ中的一些注解。好比@pointCut、@after、@before等。
但Spring AOP 并非 Aspectj,它不会向 Aspectj同样,在编译时,就把代理方法植入到目标方法中。它只是用了一些 Aspectj的工具,并对java动态代理和CGLIB代理作了一层封装,因此实际上Spring AOP和Aspectj的关系并不大