前言
本篇是spi的第二篇,紧接上一篇Dubbo内核解析-Spi,主要讲解spi中新增的AOP。首先也是先从Spring的AOP出发。
Spring的AOP理解
Spring的AOP
增强方式一共有5种,分别为
增强类型 | 应用场景 |
---|---|
前置增强 | 权限控制、记录调用日志 |
后置增强 | 统计分析结果数据 |
异常增强 | 通过日志记录方法异常信息 |
最终增强 | 释放资源 |
环绕增强 | 缓存、性能、权限、事务管理 |
通过以下方式理解记忆:try-catch-finally 这样的模式进行理解
//环绕
try {
//前置
System.out.println("=====");
//后置
}catch (Exception e){
//异常
}finally {
//最终
}
SPi的AOP
栗子:
假如接口A还有另外一个实现者:Wrapper:
class Wrapper implements A{
private A a;
AWrapper1(A a){
this.a = a;
}
}
Wrapper相当于A的包装类,类似于AOP的功能,Wrappe增加了A的功能。当我们获取接口A的实现类的时候,得到的就是包装过的类。
通过 Wrapper 类可以把所有扩展点公共逻辑移至 Wrapper 中。新加的 Wrapper 在所有的扩展点上添加了逻辑,有些类似 AOP,即 Wrapper 代理了扩展点。
给接口注入拓展点是一个Adaptive实例,知道方法执行时,才决定是哪一个拓展点的实现,
dubbo相对jdk有哪些改变:
①通过使用缓存提高性能。
②增加了通过key形式获取拓展点。
③增加了@SPI注解的默认值。
④增加了Ioc和Aop功能。