概述
本篇来继续介绍一款开源的 AOP 框架:Nepxion Matrix
,该框架致力于对 Spring AOP 的扩展和增强,灵活而且易用。
Matrix 框架主要对 Spring 做了三个模块的扩展:Spring AutoProxy,Spring Registrar,Spring Selectror。
本篇主要分析 AOP相关的功能,也就是 AutoProxy 模块。主要围绕以下几个方面:
-
Nepxion Matrix AutoProxy
框架有什么特性? -
Nepxion Matrix AutoProxy
AOP 增强框架的扩展点什么?如何扩展? -
源码分析。
-
该框架和
Spring AOP
异同点。
一:Nepxion Matrix AutoProxy特性
大多数的项目中,使用Spring AOP
的方式都是采用注解形式,方法上面加个自定义注解即可实现,这种方式注解只能加在类方法上,不能加在接口或接口方法上。Nepxion Matrix AutoProxy
主要针对这些问题,特性如下:
-
支持通用代理和额外代理
-
支持接口代理和类代理
-
支持接口方法代理
这里要介绍一下上面提到了两种代理方式:
通用代理是指通过AbstractAutoProxyCreator
中的变量interceptorNames
,来设置具体的通知名称。 额外代理是指通过实现自定义逻辑,来选择性设置通知(这里的通知也就是拦截方法)。
二:Nepxion Matrix AutoProxy扩展点
要理解该框架的实现方式,首先要知道该框架的扩展点是什么。
先来看一下代理机制相关的 UML 图:
AbstractAutoProxyCreator
抽象类为Spring AOP
暴露的抽象扩展类,其每一个实现类都代表着一种实现机制。Nepxion Matrix
也正是基于此类做为扩展点,分别来看一下涉及到核心类:
-
AbstractAutoScanProxy
:Nepxion Matrix
提供的核心抽象类,封装了获取顾问advisor
的方法,并暴露了一些抽象方法,如获取通知,注解等方法。该类同 Spring 内置的代理机制AbstractAdvisorAutoProxyCreator
平级,默认先执行Spring AOP
内置代理机制。 -
DefaultAutoScanProxy
:提供了一些默认为空的实现,不能直接使用。 -
MyAutoScanProxyForClass
:类代理机制,提供通用代理实现。 -
MyAutoScanProxyForMethod
:方法代理机制,提供额外代理。 -
MyAutoScanProxy
:混合代理,提供通用代理和额外代理。
三:源码分析
这里就针对类代理的方式,进行源码分析。先来看源码中的使用示例:
@MyAnnotation1(name = "MyAnnotation1", label = "MyAnnotation1", description = "MyAnnotation1")
public interface MyService1 {
void doA(String id);
void doB(String id);
}
@Service
public class MyService1Impl implements MyService1 {
@Override
public void doA(String id) {
System.out.println("doA");
}
@Override
public void doB(String id) {
System.out.println("doB");
}
}
示例中只需在接口上添加一个自定义注解@MyAnnotation1
&