Spring AOP 自动代理源码自动代理源码 DefaultAdvisorAutoProxyCreator
Spring AOP源码目录源码目录
Spring AOP源码01:Jdk动态代理底层源码
Spring AOP源码02:ProxyFactory
Spring AOP源码03:JdkDynamicAopProxy
Spring AOP源码04:MethodInvocation 拦截器调用
Spring AOP源码05:DefaultAdvisorAutoProxyCreator
Spring期末考压轴题:当Spring AOP遇上循环依赖
git注释源码地址:https://github.com/chaitou/spring-framework-master.git
前言前言
前面已经学习了ProxyFactory的源码,学习了如何手动硬编码使用最基础的Spring AOP,以及实现方式。这一节要学习自动代理DefaultAdvisorAutoProxyCreator源码。比起Spring AOP注解
形式实现自动代理,我们之前学习的ProxyFactory还差以下2步:
代理时机:在Spring Ioc创建Bean的过程中,寻找合适的时机进行调用Spring AOP进行代理
自动代理:搜索所有bean中注解了@Aspect的类,并且提取Advisor(切面)。当一个正常的bean创建时,从这些候选的Advisor(切面)通过Pointcut寻找与之匹配的Advice,最后生成拦截器,再
调用Proxy.getProxy()获取代理
一、代理时机一、代理时机
这一点应该引起大家的注意,因为很多书以及博客都没有讲明白,都是简单的一笔带过,但是笔者却认为如果连代理时机都弄不清楚,还谈什么自动代理呢?
1. DefaultAdvisorAutoProxyCreator类图类图
之前的Spring Ioc源码专题的生命周期中提到过这么一段话:
spring使用模板模式,在bean的创建过程中安插了许多锚点,用户寻找对应的锚点,通过重写方法介入到bean的创建过程当中。
想要介入Spring Ioc创建Bean的过程,最好的方式就是实现BeanPostProcessor,想必Spring AOP也正式通过这种方式介入Bean的创建,实现自动代理的吧。可以看
到DefaultAdvisorAutoProxyCreator类图最左边的分支上就实现了SmartInstantiationAwareBeanPostProcessor,在DefaultAdvisorAutoProxyCreator的父类AbstractAutoProxyCreator中,我们找到了其实现的
后置方法