总结

简单的对Spring-AOP源码分析做个小结。

我是通过一个小栗子开启的这个系列,首先建一个用于增强功能的bean,之后定义切面(包括切点和多个通知),
再通过aop:aspectj-autoproxy/标签开启自动代理,最后通过ClassPathXmlApplicationContext读取配置文件,测试成果。

因为使用了ClassPathXmlApplicationContext,所以在构造的时候就实例化完成了单例实例,当然那个用于增强功能的bean也被增强了,确切地说返回给IOC容器中的已经是增强了功能的代理实例。

增强入口就在AbstractAutoProxyCreator的 postProcessAfterInitialization(@Nullable Object bean, String beanName)方法。
简单点描述流程就是为特定的bean获取其适合的增强器,之后创建代理对象对象并返回。

虽然流程看起来很简单,但是里面的实现确实特别的复杂,各种反射,动态代理,CGLIB,还有AspectJ表达式解析…

简单分析完AOP,愈发知道自己的不足了。
再接再厉!

tencent.jpg