Spring源码-Aspect-Advisor与代理Interceptor
总结摘要
Spring Aspect Advisor与代理Interceptor
前置知识
Java JDK 动态代理使用方法,Java CGLIB 动态代理动态
Spring 代理与 Advisor
Spring JDK 动态代理
JdkDynamicAopProxy 是 InvocationHandler 的实现类,其 invoke 方法从 Spring 容器中获取所有匹配的 Spring AOP advisor,将其转换为 Interceptor。
|
|
Spring CGLIB 动态代理
CglibAopProxy(及其实现类 ObjenesisCglibAopProxy)使用 DynamicAdvisedInterceptor,其是 MethodInterceptor 实现类,该类的 intercept 方法从 Spring 容器中获取所有匹配的 Spring AOP advisor,将其转换为 Interceptor。
|
|
Advisor 与 Interceptor
代理公共逻辑
|
|
Advisor 转换为 Interceptor
|
|
AbstractAspectJAdvice 有 5 个实现类。
AspectJAroundAdvice,AspectJAfterAdvice 和 AspectJAfterThrowingAdvice 实现了 MethodInterceptor。
AspectJMethodBeforeAdvice 和 AspectJAfterReturningAdvice 未实现 MethodInterceptor,分别有对应的 MethodBeforeAdviceInterceptor 和 AfterReturningAdviceInterceptor。
|
|
执行 Interceptor
BeforeAdvice
|
|
其它 Advice
|
|
批量执行 Interceptor
|
|
|
|