spring-aop浅析

简介 

    这篇说说spring的aop对AspectJ的支持,我们知道AspectJ植入时机有3种:compile-time、post-compile、load-time,那spring是如何支持AspectJ的呢?要搞清楚这些得搞个demo工程翻翻代码,可以基于spring构建,也可以基于springboot构建,当然2种方式都挺简单,boot不过是替我们开启了AopAutoConfiguration。因为demo非常简单,这里不说这个demo了,直接看看原理。

组件分析

    先看看AspectJAutoProxyRegistrar,它会向容器中注册一个AnnotationAwareAspectJAutoProxyCreator,spring对AspectJ的主要的支持就从这个组件开始的。

spring-aop浅析

    即spring本身提供了自动代理的创建能力,整合AspectJ时扩展了对AspectJ的处理能力,这样可以把AspectJ的切面变成Advisor,进而创建target的代理对象。

  回顾下基于spring-aop是如何使用AspectJ的,1、引入依赖;2、写个切面注入到spring容器中;3、开启自动代理创建功能。开启自动代理创建功能时向容器中导入AnnotationAwareAspectJAutoProxyCreator,利用BeanPostProcessor机制来创建代理,在此之前根据Aspect创建Advisor。而处理Aspect变成Advisor变成了Aspect植入target另一种方式。

总结

spring-aop浅析

这样看来整个代理的构建过程就是寻找Advisor,创建代理(jdk/cglib),这样也就体现了aop的规范实现。