注:本系列源码分析基于spring 5.2.2.RELEASE,本文的分析基于 annotation 注解方式,gitee仓库链接:gitee.com/funcy/sprin….
前面几篇文章我们分析了spring aop的相关代码,这里来做个总结。
1. spring 启用 aop 功能
在spring aop(一):示例 demo 及 @EnableAspectJAutoProxy一文中,我们分析了spring通过@EnableAspectJAutoProxy注解启用aop功能,而这个注解实际上是向spring中导入了 AnnotationAwareAspectJAutoProxyCreator,而这个类是一个BeanPostProcessor,最终在bean初始化前后完成代理对象的生成。
2. 代理对象的生成
spring aop 基于注解方式的实现是通过AnnotationAwareAspectJAutoProxyCreator类来操作的,这个类是一个BeanPostProcessor,在bean的初始化前后执行的操作如下:
3. 切面方法的执行
当调用代理对象的方法,jdk会根据代理的类型而选择执行InvocationHandler#invoke(jdk动态代理)还是MethodInterceptor#intercept(cglib代理),这一步在创建代理对象时,已经与代理对象结合了,开发者无法干涉调用哪个方法,不过这两个方法里的内容开发者可以自由发挥。在这两个方法中,spring会获取可用用当前方法的所有Advisors,然后执行Advisors里的切面方法,整个过程如下:
本文原文链接:my.oschina.net/funcy/blog/… ,限于作者个人水平,文中难免有错误之处,欢迎指正!原创不易,商业转载请联系作者获得授权,非商业转载请注明出处。
本系列的其他文章