概述
Spring aop通过动态代理的方式实现,在使用spring-aop时,工程中会引入一个非spring的jar包aopalliance包,spring5中将aopalliance包中的class打进了spring-aop包中(为了减少依赖?),先看看aopalliance包中的内容:

Aopalliance包非常简单,只包括aop相关的几个接口,可将其中的接口分为两类:
· 实体域:AOP所操作的核心实体
实体域是AOP中的核心概念,核心接口是Advice,其中MethodInterceptor和ConstructorInterceptor是Advice的子接口
· 会话域:AOP运行时的上下文相关数据
这类对象中最主要的接口是Joinpoint,Invocation以及MethodInvocation和ConstructorInvocation接口都是Joinpoint的子接口
Spring-AOP是aopalliance的实现,并对aopalliance做了加强,增加了另外的实体——PointCut,PointCut表示切入点,即在哪些类的哪些方法上使用Advice
Spring AOP的设计
Spring AOP提供了多种使用方式,常用的有注释和XML,但注解和XML是非常简单易用的上层API,我们先看一下Spring AOP的更底层的API PointcutAdvisor接口,写一个PointcutAdvisor的实现类:

这里省略了getter/setter。可以看到,需要实现三个方法,先实现getPointcut方法,它需要返回一个Pointcut接口的对象,我们这里返回单例对象即可,本例简单起见,不管是否是单例,能说明问题即可,Pointcut接口中有两个方法&#