首先,Spring AOP 有一些特性:
-
纯 Java 实现,无编译时特殊处理、不修改和控制 ClassLoader
-
仅支持方法级别的 Joint Points
-
非完整的 AOP 框架
-
与 IoC 进行了整合
-
与 AspectJ 的注解进行了整合
使用层面,有三种编程模型:
-
<aop: 开头的 xml 配置。
• 激活 AspectJ 自动代理:<aop:aspectj-autoproxy/>
• 配置:<aop:config/>
• Aspect: <aop:aspect/>
• Pointcut:<aop:pointcut/>
• Advice:<aop:around/>、<aop:before/>、<aop:after-returning/>、<aop:after-throwing/> 和 <aop:after/>
• Introduction:<aop:declare-parents/>
• 代理 Scope:<aop:scoped-proxy/>
-
注解驱动
• 激活 AspectJ 自动代理:@EnableAspectJAutoProxy
• Aspect:@Aspect
• Pointcut:@Pointcut
• Advice:@Before、@AfterReturning、@AfterThrowing、@After、@Around
• Introduction:@DeclareParents
-
JDK 动态代理、CGLIB 以及 AspectJ 实现的 API
• 代理:AopProxy
• 配置:ProxyConfig
• Join Point:JoinPoint
• Pointcut:Pointcut
• Advice:Advice、BeforeAdvice、AfterAdvice、AfterReturningAdvice、 ThrowsAdvice
核心实现类:
- AOP 代理对象:AopProxy、JdkDynamicAopProxy、CglibAopProxy
- AOP 代理对象工厂:AopProxyFactory、DefaultAopProxyFactory
- AOP 代理配置:ProxyConfig
- Advisor:PointcutAdvisor、IntroductionAdvisor
- Advice:Interceptor、BeforeAdvice、AfterAdvice及子类
- Pointcut:StaticMethodMatcher
- JoinPoint:Invocation
- Advisor 适配器:AdvisorAdapter、AdvisorAdapterRegistry
- AdvisorChainFactory
- AbstractAutoProxyCreator:BeanNameAutoProxyCreator、DefaultAdvisorAutoProxyCreator、AnnotationAwareAspectAutoProxyCreator
- IntroductionInfo
- 代理目标对象来源:TargetSource