首先,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
核心实现类: