Spring 源码阅读:用于创建 AOP 代理的后处理器分析

本文深入分析Spring中的AspectJAwareAdvisorAutoProxyCreator和AnnotationAwareAspectJAutoProxyCreator后处理器,探讨它们如何在Bean实例化和初始化后创建AOP代理。通过postProcessBeforeInstantiation和postProcessAfterInitialization方法,了解AOP代理的创建原理,重点解析wrapIfNecessary方法在何时对Bean对象进行包装。
摘要由CSDN通过智能技术生成

概述

前面两篇文章分析了在注解配置和 XML 配置的情况下,Spring 是如何开启 AOP 特性的,经过源码分析我们知道,这两种方式的 AOP 开启,本质上都是注册了一个用来创建 AOP 代理的后处理器。

对于在 XML 中配置切面的情况,Spring 会把创建代理的工作交给 AspectJAwareAdvisorAutoProxyCreator 后处理器来处理,而对于通过注解配置切面的情况,则交由 AnnotationAwareAspectJAutoProxyCreator 后处理器处理。

在本文章,将对这两个后处理器进行分析,了解他们大致的工作原理。

继承关系

AspectJAwareAdvisorAutoProxyCreator 和 AnnotationAwareAspectJAutoProxyCreator 两个后处理器的继承关系,在前两篇文章中已经了解过了,这里我们再做简单的回顾。

从上图中可以知道,这两个类是直接继承的父子类,他们有很多共同继承的类和实现的接口,可以推测出他们的工作逻辑有很大一部分是相同的。

由于他们是作为后处理器注册到 Spring 容器中的,因此,他们完成 AOP 代理创建的逻辑,一定是在后处理器的方法中。从上图中看到,他们共实现了三个后处理器的接口,接下来,我们再看这三个接口中定义的方法。

实现接口

先看看这三个接口都定义了哪些方法。

既然后处理器的作用要生成一个代理对象,那么,我们就应该去分析后处理器中可以修改被处理的 Bean 对象的处理方法,再上图中罗列的方法中有以下这些:

  • postProcessBeforeInstantiation方法可以在 Spring 实例化 Bean 对象之前,创建一个 Bean 对象。
  • postProcessBeforeInitialization方法可以在 Bean 的初始化方法被执行前,修改 Bean 对象。
  • postProcessAfterInitialization方法可以在 Bean 的初始化方法被执行前,修改 Bean 对象。

以上三个方法,都可能在执行的过程中,将当前的 Bean 对象,修改为新创建的代理对象。因

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值