Springboot AOP 一 :AOP的基本概念

在一个地方定义通用功能,但是我们可以通过声明的方法定义这个功能在何处应用,无需修改受影响的类,这些类称之为切面

对于AOP的使用,我们需要抓住以下几点:

  • 通用功能:什么样的功能叫通用功能呢,比如日志、事务之类。
  • 何处使用:在什么地方会使用上日志、事务。
  • 无需修改:这算是aop 的一个特点吧,举个例子 ,如果你要在每个方法上加入日志,最简单最傻的方法是一个个加log,那么会带来一个问题,修改起来特别麻烦。这个时候就需要用到aop了。

使用前,我们还是先弄明白AOP的基本概念。

1. 通知 (Advice):

某个连接点所采用的处理逻辑,也就是向连接点注入的代码, AOP在特定的切入点上执行的增强处理。

Springboot 有5种类型的通知:

    1. @Before: 标识一个前置增强方法,相当于BeforeAdvice的功能.
    1. @After:标识一个final增强,不管是抛出异常或者正常退出都会执行.
    1. @AfterReturning: 标识一个 后置增强,似于AfterReturningAdvice, 方法正常退出时执行.
    1. @AfterThrowing: 标识一个异常抛出增强,相当于ThrowsAdvice.
    1. @Around: 标识一个环绕增强,相当于MethodInterceptor, 通知包裹着被通知的方法。中间可以使用point.proceed()继续执行方法。.

2. 连接点(JointPoint):

程序运行中的某个阶段点,比如方法的调用、异常的抛出等。

JointPoint提供对连接点可用状态和关于连接点的静态信息的反射访问。该信息可以通过特殊形式thisJoinPoint从通知体中获得。这个反射信息的主要用途是跟踪和记录应用程序。

常用的方法:

*   Object[] getArgs:返回目标方法的参数
*   Signature getSignature:返回目标方法的签名
*   Object getTarget:返回被织入增强处理的目标对象
*   Object getThis:返回AOP框架为目标对象生成的代理对象

当使用@Around处理时,需要将第一个参数定义为ProceedingJoinPoint类型,该类是JoinPoint的子类。

3. 切入点(Pointcut):

JoinPoint的集合,是程序中需要注入Advice的位置的集合,指明Advice要在什么样的条件下才能被触发,在程序中主要体现为书写切入点表达式。

    // 切入点
    @Pointcut("execution(* checkParams_*(..))")
    public void servicePointcut() {
    }

4. 增强(Advisor):

是PointCut和Advice的综合体,完整描述了一个advice将会在pointcut所定义的位置被触发。

    // 通知
    @Before(value = "servicePointcut()")
    // 连接点
    public void before(JoinPoint joinPoint) throws Exception {
        // 增强功能
    }

5. 切面(@Aspect):

通常是一个类的注解,里面可以定义切入点和通知、增强能力……

@Aspect
@Component
public class ParamsValidator {
}

通常,@Aspect与@Component搭配使用

6. AOP Proxy:

AOP框架创建的对象,代理就是目标对象的加强。Spring中的AOP代理可以使JDK动态代理,也可以是CGLIB代理,前者基于接口,后者基于子类。

   
             
                   
                     
               
                         
                             
                                   
                                   
                               
                     
             
//OK所以一个Spring增强(advisor)=切面(advice)+切入点(PointCut)

你可能感兴趣的:(Springboot AOP 一 :AOP的基本概念)