aopalliance 源码浅析

aopalliance 项目是几个对AOP和Java感兴趣的软件工程人员之间的联合开源项目,里面包含了针对面向切面的顶层接口。里边包含了8个接口和1个异常类。

Advice(通知):切面在特定连接点上采取的操作。不同类型的建议包括“前后”、“前后”的建议。许多AOP框架,包括Spring,将通知建模为拦截器,并维护围绕连接点的拦截器链。

aopalliance 源码浅析_第1张图片

Advice接口只是一个标记接口,Interceptor接口继承了Advice,也是一个标记接口。表示可以通过某种拦截器实现通知功能。

ConstructorInterceptor基本不使用,这里不做讨论。
MethodInterceptor继承了Interceptor,该接口中包含了一个方法Object invoke(MethodInvocation invocation) 。spring官方:The invoke()method should return the invocation’s result: the return value of the join point.源码中的解释是返回joinpoint#proceed()方法的结果。那么就来看看joinpoint源码。

aopalliance 源码浅析_第2张图片

Join point(连接点):程序执行过程中的一个点,如方法的执行或异常的处理。在Spring AOP中,连接点总是表示方法执行。

Joinpoint接口中有三个方法:

proceed():该方法用于执行拦截器逻辑.

getThis():返回保存当前联接点的静态部分的对象
getStaticPart()返回此连接点的静态部分(通常包含构造函数,成员变量,方法等信息)

Invocation接口继承了Joinpoint接口,该接口有连个子接口,这里也只讨论MethodInvocation接口。MethodInvocation接口中只有一个方法,返回被调用的方法信息。

MethodInvocation正是MethodInterceptor#invoke方法的参数,也就是说MethodInterceptor#invoke返回值就是MethodInvocation#proceed方法的执行结果,即方法拦截器最终会返回方法调用的结果。在spring实现中,拦截器是一个链式结构,它们会在方法执行中添加一些横切逻辑,实现特定的功能。

你可能感兴趣的:(spring,aop)