zoukankan      html  css  js  c++  java
  • 注解@Aspect实现AOP功能

    springboot中pom引入jar

    <!-- aop 切面 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-aop</artifactId>
            </dependency>

    要想把一个类变成切面类,需要两步, 
    ① 在类上使用 @Component 注解 把切面类加入到IOC容器中 
    ② 在类上使用 @Aspect 注解 使之成为切面类

    相关代码

    @Aspect
    @Component
    public class AspectTest {
        /**
         * 前置通知:目标方法执行之前执行以下方法体的内容
         * @param jp
         */
        @Before("execution(* com.springboot.aop.controller.*.*(..))")
        public void beforeMethod(JoinPoint jp){
            String methodName = jp.getSignature().getName();
            System.out.println("【前置通知】the method 【" + methodName + "】 begins with " + Arrays.asList(jp.getArgs()));
        }
    
        /**
         * 返回通知:目标方法正常执行完毕时执行以下代码
         * @param jp
         * @param result
         */
        @AfterReturning(value="execution(* com.springboot.aop.controller.*.*(..))",returning="result")
        public void afterReturningMethod(JoinPoint jp, Object result){
            String methodName = jp.getSignature().getName();
            System.out.println("【返回通知】the method 【" + methodName + "】 ends with 【" + result + "】");
        }
    
        /**
         * 后置通知:目标方法执行之后执行以下方法体的内容,不管是否发生异常。
         * @param jp
         */
        @After("execution(* com.springboot.aop.controller.*.*(..))")
        public void afterMethod(JoinPoint jp){
            System.out.println("【后置通知】this is a afterMethod advice...");
        }
    
        /**
         * 异常通知:目标方法发生异常的时候执行以下代码
         */
        @AfterThrowing(value="execution(* com.springboot.aop.controller.*.*(..))",throwing="e")
        public void afterThorwingMethod(JoinPoint jp, NullPointerException e){
            String methodName = jp.getSignature().getName();
            System.out.println("【异常通知】the method 【" + methodName + "】 occurs exception: " + e);
        }
    
      /**
       * 环绕通知:目标方法执行前后分别执行一些代码,发生异常的时候执行另外一些代码
       * @return
       */
      @Around(value="execution(* com.springboot.aop.controller.*.*(..))")
      public Object aroundMethod(ProceedingJoinPoint jp){
          String methodName = jp.getSignature().getName();
          Object result = null;
          try {
              System.out.println("【环绕通知中的--->前置通知】:the method 【" + methodName + "】 begins with " + Arrays.asList(jp.getArgs()));
              //执行目标方法
              result = jp.proceed();
              System.out.println("【环绕通知中的--->返回通知】:the method 【" + methodName + "】 ends with " + result);
          } catch (Throwable e) {
              System.out.println("【环绕通知中的--->异常通知】:the method 【" + methodName + "】 occurs exception " + e);
          }
    
          System.out.println("【环绕通知中的--->后置通知】:-----------------end.----------------------");
          return result;
      }
    }
    作者:胖百二
    来源:CSDN
    原文:https://blog.csdn.net/wellxielong/article/details/80642726
    版权声明:本文为博主原创文章,转载请附上博文链接!
  • 相关阅读:
    docker安装mtproto及报错解决方案
    Centos7下创建和管理用户
    GitHub项目绑定自己的域名
    navicate远程连接mysql8.0失败
    Java反射
    Spring AOP
    Spring注解
    学习进度笔记20
    学习进度笔记19
    学习进度笔记18
  • 原文地址:https://www.cnblogs.com/lc0605/p/10694489.html
Copyright © 2011-2022 走看看