zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    ajax获取数据中文乱码问题最简单的完美解决方案
    修改easyui默认datagrid的表格内字体大小,样式
    setTimeout延迟加载方法的使用
    解决java.lang.IllegalArgumentException: No converter found for return value of type: class java.util.ArrayList的问题
    模块和包
    常用模块
    匿名函数及推导式
    python-迭代器和生成器
    python-内置函数
    python-递归
  • 原文地址:https://www.cnblogs.com/bi-hu/p/15046040.html
Copyright © 2011-2022 走看看