zoukankan      html  css  js  c++  java
  • 关于Spring的AOP的通知类型(在AspectJ)的情况下使用

    package com.layne.spring.aspect.aspects;
    
    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.After;
    import org.aspectj.lang.annotation.AfterReturning;
    import org.aspectj.lang.annotation.AfterThrowing;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Before;
    import org.aspectj.lang.annotation.Pointcut;
    
    @Aspect //表示当前POJO类为切面
    public class MyAspect {
        
        //定义前置通知方法
        @Before("execution(* *..ISomeService.doSome(..))")
        public void myBefore(){
            System.out.println("执行前置通知方法myBefore");
        }
        //定义前置通知方法
        @Before(value = "execution(* *..ISomeService.doSome(..))")
        public void myBefore(JoinPoint jp){  //所有通知类型下,都有这个参数
            System.out.println("执行前置通知方法   Jp="+jp);
        }
        //定义前置通知方法
        @AfterReturning("execution(* *..ISomeService.doSecond(..))")
        public void afterReturning(){
            System.out.println("执行后置通知方法  ``````");
        }
        //定义后置通知方法
        @AfterReturning(value = "execution(* *..ISomeService.doSecond(..))",returning="result")
       public void afterReturning(Object result){
            System.out.println("执行后置通知方法  result="+result);
        }
        //环绕通知方法
        @Around("execution(* *..ISomeService.doThird(..))")
       public Object MyAround(ProceedingJoinPoint pjp) throws Throwable{
            System.out.println("执行目标方法之前执行···000000");
            Object proceed = pjp.proceed();
            String upperCase = ((String)proceed).toUpperCase();
            System.out.println("执行目标方法之后执行····00000");
            return upperCase;
            
        }
        //异常通知
        @AfterThrowing(value="execution(* *..ISomeService.doSome(..))",throwing="ex")
        public void myThrows(Exception ex){
            System.out.println("执行异常通知······ex="+ex.getMessage());
        }
        
        //最终通知
        @After("doSomePointCut()")
        public void myAfter(){
            System.out.println("执行最终通知+++++++00999999999000+++++++");
        }
        //定义通知的切点
        @Pointcut(value="execution(* *..ISomeService.doSome(..))")
        private void doSomePointCut(){};
        
    }
  • 相关阅读:
    微信h5下拉隐藏网页,还有取消页面滑动
    vuejs中使用递归嵌套组件
    运行gitbook init命令报错及问题解决办法
    利用python生成gitbook目录文件
    通过Appium日志,分析其运行原理
    字符串两两更换位置
    Dockerfile启动的程序,内存不断增长问题
    测试流程优化
    APP测试面试题(一)
    关于面试总结13-app测试面试题
  • 原文地址:https://www.cnblogs.com/flytogalaxy/p/7404918.html
Copyright © 2011-2022 走看看