美文网首页
大白话AOP的一些相关概念

大白话AOP的一些相关概念

作者: 不过意局bugyj | 来源:发表于2020-02-19 21:58 被阅读0次

    AOP原理

    参考:Spring AOP概念理解 (通俗易懂)

    面向切面编程,即将重复性的逻辑代码横切出来,封装称单独的类,以实现代码重用、非核心代码(如日志,性能等)和核心代码分离的作用。

    横切出来的类就为切面(Aspect),一个切面包含三个内容才能发挥作用:在哪(切入点 pointcut),什么时候干什么(合为 通知Advice,其中包括方法表明干什么,注解表明什么时候(joinPoint连接点))。

    • pointcut切入点即在那个方法执行这些代码,示例:
      execution("public * com.example..*.*(..) *")
      语法:
      execution(<修饰符模式>?<返回类型模式><方法名模式>(<参数模式>)<异常模式>?)
      还可以实现比如 set*表示set开头的方法或类。

    • advice通知(这个命名让我一脸黑人问号)

      • joinPoint连接点表明什么时候,比如在方法执行前(@Before)、执行后(@After)、执行前后(@Around)、抛出异常后(After-throwing)、方法执行成功后(@After-returnning)调用。

    而目标(Target)指的就是切入点所在类,给其方法添加切面这个动作即织入(weaving)。AOP的原理是动态代理,生成的代理类简称为代理(Proxy)。

    示例代码:

    @Component
    @Aspect
    public class ExampleAspect {
    
        // 切入点
        @Pointcut("execution(* com.example.Example.*(..)) || " +
            "...")
        public void exampleService(){}
    
        // 通知
        @Around("exampleService()")
        public ResponseEntity log(ProceedingJoinPoint joinPoint) {
            ...
        }
    }
    
    

    这里我们已经对于Example类的所有方法织入了log方法,ExampleAspect作为目标类将会由JDK生成动态代理类,这可以避免我们手动定义很多代理类,而重用这个切面。

    相关文章

      网友评论

          本文标题:大白话AOP的一些相关概念

          本文链接:https://www.haomeiwen.com/subject/gcszfhtx.html