Spring ⑨ AOP 何时创建代理对象

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

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

认识 AnnotationAwareAspectJAutoProxyCreator

在开始之前先向读者介绍 AnnotationAwareAspectJAutoProxyCreator 它是 BeanPostProcessor 接口的实现, spring 对目标对象进行代理就是以它作为入口. 本章不会对该类进行详细讲解,只是让大家知道这个类跟 springAOP 功能十分密切。它将 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