zoukankan      html  css  js  c++  java
  • springBoot AOP切面编程

    AOP 为 Aspect Oriented Programming 的缩写,意为 面向切面编程。AOP 为spring 中的一个重要内容,它是通过对既有程序定义一个切入点,然后在其前后切入不同的执行内容。

    AOP 不会破坏原有程序的逻辑,很好的和业务逻辑进行隔离,耦合度低。

    常用比如AOP 的日志记录。

    1.pom加入AOP依赖包

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

    2.建立LogAspect 类,该类必须在 主程序的扫包范围内

    @Aspect
    @Component
    @Slf4j
    public class LogAspect {
    
        @Pointcut("execution(public * 扫包路径..*.*(..))")
        public void LogHelp() {
        }
    
        @Pointcut("execution(public * 扫包路径..*.*(..))")
        public void LogErrorHelp() {
        }
    
        @Before("LogHelp()")
        public void doBefore(JoinPoint joinPoint) throws Throwable {
            // 接收到请求,记录请求内容
            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            HttpServletRequest request = attributes.getRequest();
            // 记录下请求内容
            System.out.println("URL : " + request.getRequestURL().toString());
            System.out.println("HTTP_METHOD : " + request.getMethod());
            System.out.println("IP : " + request.getRemoteAddr());
            System.out.println("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
            System.out.println("ARGS : " + Arrays.toString(joinPoint.getArgs()));
        }
    
        @AfterReturning(returning = "ret", pointcut = "LogHelp()")
        public void doAfterReturning(Object ret) throws Throwable {
            // 处理完请求,返回内容
            System.out.println("方法的返回值 : " + ret);
        }
    
        @AfterThrowing("LogErrorHelp()")
        public void doAfterThrowing(JoinPoint jp) {
            System.out.println("方法异常时执行.....");
            System.out.println(jp.toString());
        }
    }//end
    欢迎指正:haizi2014@qq.com
  • 相关阅读:
    琴生(Jensen)不等式
    基本不等式
    集成学习之梯度提升树(GBDT)
    EM 算法原理
    FSMC驱动8位TFT
    GitHub 上有什么嵌入式方面的项目?
    在SPI_FLASH上建立文件系统
    百为STM32开发板教程——从LED流水灯到UCGUI手机界面
    STM32F1_外部NorFlash存储程序代码
    nor flash之擦除和写入
  • 原文地址:https://www.cnblogs.com/hcfan/p/9888413.html
Copyright © 2011-2022 走看看