深入理解Spring 之 源码剖析AOP(注解方式)

上一篇文章我们从XML 配置文件的方式剖析了AOP的源码,我们也说了,虽然现在用XML配置的几乎没有了,但作为学习的例子,XML配置仍然是我们理解Spring AOP 的一个绝好的样本,但作为一个由追求的程序员,我们天天使用的注解方式的AOP 肯定也是要去看看到底是如何实现的。现在有了之前阅读 XML 配置的源码的基础,今天我们来阅读注解方式的源码也变得轻松起来。

还记得我们之前说过,XML 配置的AOP是使用 ProxyFactoryBean ,实现了 FactoryBean的接口,而FactoryBean是Spring特意留给开发者们扩展的接口,而Spring 留给开发者们不止一个扩展接口,比如 BeanPostProcess 接口,实现着接口就可以在每个Bean的生成前后做一些增强或自定义(具体Spring 留给我们有哪些扩展接口,楼主有机会将会再写一篇文章解析)。

接下来就要好好讲讲我们上篇文章漏讲的接口设计。这是我们理解 AOP 的基础。

先从 ProxyFactoryBean 讲起,这个熟悉的哥们。

1. ProxyFactoryBean 类结构

1.1 ProxyCreatorSupport 类结构图

它继承了 ProxyCreatorSupport 这个类,这个类很重要,我们看看该类结构

该类有2个重要的方法,分别是获取代理工厂,创建代理。那么代理工厂是什么呢?AopProxyFactory ,是个接口,只定义了一个方法:AopProxy createAopProxy(AdvisedSupport config) throws AopConfigException, 并且该接口目前只有一个默认实现类:DefaultAopProxyFactory,该类主要重写了接口方法 createAopProxy, 内部逻辑是根据给定的类配置来创建不同的代理 AopProxy,那么 AopProxy 是什么呢?就是真正创建代理的工厂,他是一个接口,有3个实现:

1.2 AopProxy 接口

1.3 AopProxy 继承结构

从名字上可以看出来,一个是 JDK 动态代理,一个是 Cglib 代理,ObjenesisCglibAopProxy 扩展了它的父类 CglibAopProxy,在 DefaultAopProxyFactory 的实现里,使用的就是 ObjenesisCglibAopProxy 来实现 Cglib 的代理。他们分别实现了自己的getProxy 方法用以创建代理。我们看看这两个类的继承结构:

1.4 JdkDynamicAopProxy 继承结构

1.5 CglibAopProxy 继承结构没什么,主要是众多内部类

可以看到哟非常多的内部类,这些内部类是为了实现了 Cglib 的各种回调而实现的。主要实现了 MethodInterceptor 接口,
Callback 接口,Joinpoint 接口,Invocation 接口等待,总之是实现了Spring 的 cglib 模块的各种接口。

说了那么多,我们

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值