AOP又称为面向切面编程。Aspect-Oriented Programming。其中Aspect是一中模块化机制,用来描述分散在对象、类或函数中的横切关注点。从关注点中分离出横切关注点是面向切面编程的程序设计核心概念。
AOP的主要概念有:
1.基础:被增强的对象,或目标对象。
2.切面:包含对于基础的增强应用
3.配置:将切面和基础结合在一起,从而完成切面对基础的编织。
Spring的AOP主要使用Java本身的语言特性,如Proxy代理类、拦截器等技术。
- Advice通知
Advice通知定义在连接点做什么,为切面增强提供织入接口。在Spring中,主要描述Spring AOP围绕方法调用而注入的切面行为。
- BeforeAdvice接口
MethodBeforeAdvice接口继承了BeforeAdvice接口,提供了一个before方法
void before(Method method,Object[] args,Object target) throws Throwable;
```
该方法是现在Advice中被配置到目标方法后,会在调用目标方法前被回调。其中Method对象时目标方法的反射对象,Object[]对象数组包含目标方法的输入参数,target对象表示被增强的对象。
- AfterAdvice通知
AfterReturningAdvice类继承了AfterAdvice接口,提供了一个afterReturning方法
void afterReturning(Object returnValue, Method method, Object[] args, Object
target) throws Throwable;
表示在目标方法调用结束并成功返回后,该方法会被AOP回调。其中returnValue表示目
标方法的返回结果、反射对象、调用参数和被增强对象。
ThrowsAdvice通知
它在抛出异常时被回调,利用反射机制完成。也是继承了AfterAdvice接口。
2. PointCut切点
切点决定Advice通知应该作用月那个连接点,也即通过PointCut来定义需要增强的方法集合。
PointCut接口为实现切点的父类接口,其有三个方法
ClassFilter getClassFilter();
MethodMatcher getMethodMatcher();
Pointcut TRUE = TruePointcut.INSTANCE;
其中ClassFilter为AOP的拦截器。
PointCut为一个切点。其中TruePointCut.INSTANCE为一个单例模式
MethodMatcher为方法的匹配。其判断是否需要对当前方法调用进行增强,或是否需要对
当前调用方法应用配置好的Advice通知。
3. Advisor通知器
完成对目标方法的切面增强(Advice)和切点设计(PointCut)后,需要一个对象将它们结合起来,就是Advisor通知器。这个结合为IoC容器配置AOP应用提供了便利。
在Advisor接口中,有两个方法
Advice getAdvice();
boolean isPerInstance();
“`
其中getAdvice方法表示返回Advice通知
isPerInstance表示这个Advice通知是否与一个或一系列来自同一Spring bean工厂的特定的实例相关联
- DefaultPointCutAdvisor类实现了Advisor接口
它有两个属性advice和pointcut。可以用这两个属性来分别配置Advice和PointCut。