Spring源码阅读之AOP标签动态代理分析-第2篇
上篇文章我们讲到了 AOP 标签解析,今天来讲讲 AOP 的动态代理具体实现,之前文章介绍过 BeanPostProcessor,该接口提供了两个方法postProcessBeforeInitialization()
和 postProcessAfterInitialization()
,其在 bean 实例初始化前后被调用。如果不熟悉的朋友可以先看看之前的文章。
上篇文章我们讲到注册了一个AnnotationAwareAspectJAutoProxyCreator
对象,该对象调用postProcessAfterInitialization()
方法来创建 AOP 动态代理,具体实现由父类AbstractAutoProxyCreator
来实现的,通过父类实现的postProcessAfterInitialization()
方法来创建动态代理对象。
通过
AbstractAutoProxyCreator.postProcessAfterInitialization()
方法创建代理对象,如果需要的话。若需要创建动态代理对象,则调用
AbstractAutoProxyCreator.wrapIfNecessary()
获取。根据 bean 实例对应的 class 属性和 beanName 获取对应的 advices,即获取切面定义信息。
获取所有候选的 Advices 集合
从获取到的候选 Advices 集合中挑选合格的 Advices
根据 bean 实例及获取到的属性创建动态代理对象。
根据条件选择选择使用 JDK 动态代理还是 CGlib 动态代理创建代理对象并返回。
到此,关于 Spring 系列源码分析暂时告一段落(但是 Spring 远远不止这些知识点),如果读者朋友有想了解的知识点,欢迎积极留言,后续遇到比较有趣的知识点在来补充。
面对当下互联网流量的不断增长,大家也越来越多的讨论高并发大流量场景设计,比如淘宝双 11 实时成交额是怎么做到的;比如用户在浏览网站时,根据其浏览过的页面实时推荐一些可能感兴趣的信息是怎么做到的等等很多场景。接下来通过介绍系列Kafka文章,从其中来寻找一些解决之道,敬请期待。
创作不易,白嫖点个再看,喜欢加个关注