zoukankan      html  css  js  c++  java
  • Spring AOP注解

    声明切面类

      @Aspect(切面):通常是一个类,里面可以定义切入点和通知

    配置切入点和通知

    LogAdvice.java

    package net.cybclass.sp.aop;
    
    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Before;
    import org.aspectj.lang.annotation.Pointcut;
    import org.springframework.stereotype.Component;
    
    //能被扫描
    @Component
    //告诉Spring,这是一个切面类,里面可以定义切入点和通知
    @Aspect
    public class LogAdvice {
        //切入点表达式
        @Pointcut("execution(* net.cybclass.sp.servicce.VideoServiceImpl.*(..))")
        public void aspect(){
    
        }
        //前置通知
        @Before("aspect()")
        public void beforeLog(JoinPoint joinPoint) {
            System.out.println("LogAdvice beforeLog 被调用了");
        }
        //后置通知
        @Before("aspect()")
        public void afterLog(JoinPoint joinPoint) {
            System.out.println("LogAdvice afterLog 被调用了");
        }
    }

    开启Spring AOP注解配置

    package net.cybclass.sp.aop;
    
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.EnableAspectJAutoProxy;
    import org.springframework.stereotype.Component;
    //告诉Spring,这个类可以被扫描
    @Component
    //扫描包
    @ComponentScan("net.cybclass")
    @EnableAspectJAutoProxy //开启了spring对aspect的支持
    public class AnnotationConfig {
    }

    VideoService.java

    package net.cybclass.sp.servicce;
    
    import net.cybclass.sp.domain.Video;
    
    public interface VideoService {
        int save(Video video);
        Video findById(int id);
    }

    VideoServiceImpl.java

    package net.cybclass.sp.servicce;
    
    import net.cybclass.sp.domain.Video;
    import org.springframework.stereotype.Component;
    
    //@Component("videoService") //相当于配置bean的id
    @Component() //相当于配置bean的id
    public class VideoServiceImpl implements VideoService{
        public int save(Video video) {
            System.out.println("保存Video");
            return 0;
        }
    
        public Video findById(int id) {
            System.out.println("根据id找视频");
            return new Video();
        }
    }

    演示

    环绕通知

    package net.cybclass.sp.aop;
    
    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.*;
    import org.springframework.stereotype.Component;
    
    //能被扫描
    @Component
    //告诉Spring,这是一个切面类,里面可以定义切入点和通知
    @Aspect
    public class LogAdvice {
        //切入点表达式
        @Pointcut("execution(* net.cybclass.sp.servicce.VideoServiceImpl.*(..))")
        public void aspect(){
    
        }
        //前置通知
        @Before("aspect()")
        public void beforeLog(JoinPoint joinPoint) {
            System.out.println("LogAdvice beforeLog 被调用了");
        }
        //后置通知
        @After("aspect()")
        public void afterLog(JoinPoint joinPoint) {
            System.out.println("LogAdvice afterLog 被调用了");
        }
        @Around("aspect()")
        public void around(JoinPoint joinPoint) throws Throwable {
            //获取目标类
            Object target=joinPoint.getTarget().getClass().getName();
            System.out.println("调用者:"+target);
            Object[] args=joinPoint.getArgs();
            System.out.println("参数:"+args[0]);
            Long start=System.currentTimeMillis();
            System.out.println("环绕通知 环绕前===========");
            //执行连接点的方法
            ((ProceedingJoinPoint)joinPoint).proceed();
            Long end=System.currentTimeMillis();
            System.out.println("环绕通知 环绕后===========");
            System.out.println("调用方法总耗时 time = "+(end-start)+" ms ");
        }
    }
  • 相关阅读:
    SpringBoot整合Apache-CXF实践
    jar包部署指定不同环境
    Cannot create GC thread. Out of system resources.
    更改"xxxx" 的权限: 不允许的操作
    [AWS] Lab: Configure a Cognito user can access DynamoDB for read
    [Tools] VI cmds
    [AWS DA GURU] KMS and Encryption on AWS
    [Linux] Add new sudo user & assign folder owner
    [AWS
    [AWS
  • 原文地址:https://www.cnblogs.com/chenyanbin/p/13308228.html
Copyright © 2011-2022 走看看