源码剖析springAOP的执行流程(注解方式启动spring)

源于蚂蚁课堂的学习,点击这里查看

1.源码流程

 

 

 

 

 

 

 

 

 

扫描二维码关注公众号,回复: 11205530 查看本文章

 

 

 

 

 

 

2.总结

1.@EnableAspectJAutoProxy开启aop
2.底层是将AspectJAutoProxyRegistrar注入spring容器
3.AspectJAutoProxyRegistrar通过AopConfigUtils.registerAspectJAnnotationAutoProxyCreatorIfNecessary(registry)的底层
registerOrEscalateApcAsRequired(AnnotationAwareAspectJAutoProxyCreator.class, registry, source) 
将AnnotationAwareAspectJAutoProxyCreator注入spring容器
4.AnnotationAwareAspectJAutoProxyCreator是BeanPostProcessor的子类,也是AOP的入口
5.AnnotationAwareAspectJAutoProxyCreator的上级中AbstractAutoProxyCreator为AOP的核心类
6.AbstractAutoProxyCreator重新了后置处理方法postProcessAfterInitialization,其中通过wrapIfNecessary创建代理
7.Object proxy = createProxy(
					bean.getClass(), beanName, specificInterceptors, new SingletonTargetSource(bean));
8.层层包装调用,进入到DefaultAopProxyFactory的createAopProxy方法创建代理
9.创建代理时判断目标对象是否实现接口,是则使用JDK的动态代理,否则使用CGLIB的动态代理
10.在JDK的动态代理的类JdkDynamicAopProxy中,可看到其中invoke方法实现代理功能
11.List<Object> chain = this.advised.getInterceptorsAndDynamicInterceptionAdvice(method, targetClass);获取aop的所有通知
12.使用责任链模式执行所有通知,执行目标方法
13.当我们在调用getBean去实例化springbean时,安装springbean的生命周期,在执行完bean自定义的init方法后,进入后置处理
这时就会创建代理类,当bean执行方法时,进入代理类的invoke,执行所有通知,再执行目标方法,实现代理功能
原创文章 148 获赞 258 访问量 11万+

猜你喜欢

转载自blog.csdn.net/yxh13521338301/article/details/105224144