Spring AOP-2 Advise和Advisor和Advised

一. 介绍

在 Spring 中,经常可以看到 Advice、Advisor、Advised 等接口,它们长的很像,经常容易搞混;但是它们是完全不同的东西,有着不同的功能;

理解这几个接口,能让我们更好的理解 Spring AOP,我们先简单介绍这几个接口;

  1. Advice:org.aopalliance.aop.Advice;
    • 通知,表示 Aspect 在特定的 join point 采取的操作,包括 around、before、after 等;
  2. Pointcut:org.springframework.aop.Pointcut;
    • 切点,它是用来匹配连接点 join point 的;一个 Pointcut 可以用来匹配一些 join point;
  3. Advisor:org.springframework.aop.Advisor;
    • 通知者,它持有一个 Advice,注意是一个,它是 Spring AOP 的一个基础接口;
  4. Advised:org.springframework.aop.framework.Advised;
    • AOP 代理工厂配置类接口,提供了操作和管理 Advice 和 Advisor 的能力;
    • 这个类功能很广,很强大;任意 AOP 代理类对象都可以转换为 Advised 实例对象,这是因为 AOP 在生产代理类的时候会让代理类实现 Advised 接口;后续我们会探讨这个点;

二. 类图

三个接口类图如下:

  1. Advisor 可以获取到一个 Advice;
  2. PointcutAdvisor 继承了 Advisor,它可以获取到一个 Pointcut 和一个 Advisor;PointcutAdvisor 是一个功能完善的接口;
  3. Advised 是 AOP 代理工厂配置类接口,它可以操作和管理 Advice 和 Advisor,它的实现类有 ProxyConfig、ProxyFactory、AspectJProxyFactoty 等,用于生产 AOP 代理类;

在这里插入图片描述

三. Advice

Advice 接口如下,可以看到,Advice 只是一个接口,它没有任何方法;

public interface Advice {

}

Advice 类图全景如下,功能最强大的是 MethodInterceptor;

在这里插入图片描述

我们可以简单看下这个 MethodInterceptor;

@FunctionalInterface
public interface MethodInterceptor extends Interceptor {

   /**
    * invoke() 是核心方法,它有一个参数:MethodInvocation
    * MethodInvocation 也很重要,后续我们也会遇到
    */
   @Nullable
   Object invoke(@Nonnull MethodInvocation invocation) throws Throwable;

}

Advice 大体上分为了三类:BeforeAdvice、MethodInterceptor、AfterAdvice;

可以看出,MethodInterceptor 是功能最强大的,它能够处理 BeforeAdvice、AroundAdvice、AfterAdvice、ThrowsAdvice、@Valid 方法参数校验、@Async 异步等;

四. Advisor

Advisor 接口如下;

public interface Advisor {

   /**
    * Common placeholder for an empty {@code Advice} to be returned from
    * {@link #getAdvice()} if no proper advice has been configured (yet).
    * @since 5.0
    */
   Advice EMPTY_ADVICE = new Advice() {};


   /**
    * 持有一个 advice 对象
    */
   Advice getAdvice();

}

Advisor 最常用的 Advisor 是 PointcutAdvisor,通过 PointcutAdvisor,可以获取到 Pointcut 和 Advice;

五. Advised

Advised 接口如下;
在这里插入图片描述

类图如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Advised 是 AOP 代理工厂配置类接口;

它的实现类有:ProxyConfig、AdvisedSupport、ProxyFactory;

Advised 提供了操作和管理 Advice 和 Advisor 的能力,所以,ProxyFactory 实现 Advised 之后,就可以方便的获取和操作 Advice、Advisor,从而创建 AOP 代理类了,并且任意 AOP 代理对象都可以转换为 Advised 实现类;

  • 7
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值