• 19.Spring AOP 注解通知的类型 以及 切点表达式的抽取


    通知的配置语法:@通知注解(“切点表达式")

    这几个 对应的 注解就是 这几个了啊。

    直接在切面中的方法 直接 注解  贼方便啊  !!

    我们示范一下  环绕 和 最终没其他的自己测试:

    package com.bihu.anno;
    
    
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.After;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Before;
    import org.springframework.stereotype.Component;
    
    @Component("MyAspect")      //注册Bean
    @Aspect         //注册切面类
    public class MyAspect {
    
        //环绕通知【不管是用注解还是配置  参数都需要一个切点类】
        @Around("execution(* com.bihu.anno.*.*(..))")
        public Object around(ProceedingJoinPoint pjp) throws Throwable {
            System.out.println("环绕前代码通知增强");
            Object proceed = pjp.proceed();
            System.out.println("环绕后代码通知增强");
            return proceed;
        }
    
        //最终通知
        @After("execution(* com.bihu.anno.*.*(..))")     // 配置前置通知 和 切点表达式
        public  void after() {
            System.out.println("前置代码增强");
        }
    
    }

    注意看注释,是不是很容易列,贼方便

    运行结果:

    所以 ,是吧 贼方便。

    2. 切点表达式的抽取

    同 xml 配置 aop 一样,我们可以将切点表达式抽取。抽取方式是在切面内定义方法,在该方法上使用@Pointcut 注解定义切点表达式然后在在增强注解中进行引用。具体如下:

    说白了就是定义一个空方法,然后在空方法中引用 @Pointcut 注解 ,最后的 切点表达式都可以引用这个空方法(2种方式):

    package com.bihu.anno;
    
    
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.*;
    import org.springframework.stereotype.Component;
    
    @Component("MyAspect")      //注册Bean
    @Aspect         //注册切面类
    public class MyAspect {
    
        //环绕通知
        @Around("pointcut()")   //引用切点表达式的第一种方式 直接:方法名()
        public Object around(ProceedingJoinPoint pjp) throws Throwable {
            System.out.println("环绕前代码通知增强");
            Object proceed = pjp.proceed();
            System.out.println("环绕后代码通知增强");
            return proceed;
        }
    
        //最终通知
        @After("MyAspect.pointcut()")     //引用切点表达式的第 二 种方式 直接:类名.方法名()
        public  void after() {
            System.out.println("前置代码增强");
        }
    
        //定义切点表达式
        @Pointcut("execution(* com.bihu.anno.*.*(..))")
        public void pointcut(){
    
        }
    }

    抽取切点表达式 后 引用的 2 种 方式都写出来了 ,具体,自己去看看,非常容易。 

    本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/15046040.html

  • 相关阅读:
    通过 AWS CLI 操作 AWS S3
    AWS S3文件存储服务器搭建(新)
    Vertx 接入MongoDB (九)
    Vertx 接入Redis (八)
    Vertx Mysql数据库优化 (七)
    Vertx 接入Mysql数据库 (六)
    Vertx 实现webapi实战项目(五)
    Vertx 实现webapi实战项目(四)
    Vertx 实现webapi实战项目(三)
    正则表达式:元字符(基本可用来匹配的字符)
  • 原文地址:https://www.cnblogs.com/bi-hu/p/15046040.html
Copyright © 2020-2023  润新知