Spring ⑨ AOP 何时创建代理对象

Spring 源码系列文章会遵循由浅入深,由易到难,由宏观到微观的原则,目标是尽量降低学习难度,而不是一上来就迷失在源码当中. 文章会从一个场景作为出发点,针对性的目的性极强的针对该场景对 Spring 的实现原理,源码进行探究学习。该系列文章会让你收获什么? 从对 Spring 的使用者成为 Spring 专家。该文章会同步在微信公众号 【DevXJava】, 方便在微信客户端阅读。

本章会探究 spring 是在什么时候创建的 AOP 代理对象.为了方便读者理解本章内容不会涉及到过多的源码,只是在宏观层面上让读者了解 AOP 代理对象是在什么时候创建的.

认识 AnnotationAwareAspectJAutoProxyCreator

在开始之前先向读者介绍 AnnotationAwareAspectJAutoProxyCreator 它是 BeanPostProcessor 接口的实现, spring 对目标对象进行代理就是以它作为入口. 本章不会对该类进行详细讲解,只是让大家知道这个类跟 spring 的 AOP 功能十分密切。它将 AOP 技术与 bean 创建过程结合起来.

image.png

场景

public Object applyBeanPostProcessorsAfterInitialization(Object existingBean, String beanName)
throws BeansException {

Object result = existingBean;
for (BeanPostProcessor processor : getBeanPostProcessors()) {
Object current = processor.postProcessAfterInitialization(result, beanName);
if (current == null) {
return result;
}
result = current;
}
return result;
}

这里也只有 AnnotationAwareAspectJAutoProxyCreator 这一个 BeanPostProcessor.


这里的 wrapIfNecessary 才会真正去创建代理对象。还有一种创建代理对象的场景适用于 循环引用 的场景,在 getEarlyBeanReference 方法中创建了代理对象。详情请看 Spring ⑦ 循环引用问题。


创建 AOP 代理对象的过程大致如下图,之后的章节中会详细探究 spring AOP 创建代理对象的过程。



DevX 会持续分享 Java 技术干货,如果你觉得本文对你有帮助希望你可以分享给更多的朋友看到。该文章会同步在微信公众号 【DevXJava】, 方便在微信客户端阅读。

DevX 不止于技术

本篇文章来源于微信公众号: DevXJava



微信扫描下方的二维码阅读本文

此作者没有提供个人介绍
最后更新于 2023-05-28