上一篇我们讲了before,这里我们讲after

这边我们看里面的return方法,返回的必要信息,除了一个shouldskip其他的基本没有什么意义,上一篇就讲过了,shouldskip也讲过了,只是原来是从容器中将所有object对象拿出来一个个比对拿到切面修饰的方法,这里就直接能从缓存中拿出来了,因为before已经放入过缓存了。

接下来我们看关键方法,源码里也有了注释,创建代理如果有增强器
我们看到里面的方法是这样的,没什么特色,就是查询代理对象如果有就返回 没有就返回一个空
我们继续看findEligibleAdvisors方法,第一个调用的findCandidateAdvisors没有在讲的意义,before那边就讲过了,只是这边是从缓存中获取到了数据,我们主要讲findAdvisorsThatCanApply这个方法

findAdvisorsThatCanApply这个方法点进去 我们看到有个findAdvisorsThatCanApply,继续点进去

我们发现他有2个for循环,通过断点的方式我发现,第一个for循环他的数据是匹配不上的没有一个对象的属性是IntroductionAdvisor,直接失败,走下面的for循环,第二个for循环中第一个if语句也是失败的,所有走第二个

我们点进去看第二个if语句是个canApply方法,我们继续看,发现我们的切面方法依然不是IntroductionAdvisor,走下一个elseif

经过多个数据跳过后终于进入了我想要看的点,我们可以看到这次传入的方法为AspectJExpressionPointcut: () pointCut(),我们要的就是这个,他就会返回true值
然后我们一点点返回方法,最后就是将值放入了eligibleAdvisors缓存对象

继续往回走,我们发现他将值放入了advisedBeans缓存,并且调用了createProxy创建代理的方法

接下来我们看创建代理的方法AutoProxyUtils.exposeTargetClass获取合并的bean定义,customizeProxyFactory对代理工厂定义,最后返回代理对象

before和after初始化就到这里,后面的返回就是将对象保存到单例中放到容器中。