• 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
  • 相关阅读:
    用原生js实现ajax、jsonp
    $.ajax()方法详解
    用原生js实现ajax
    escape()、encodeURI()、encodeURIComponent()区别详解
    stylus项目知识点
    vue之给a标签赋值
    iOS—网络实用技术OC篇&网络爬虫-使用java语言抓取网络数据
    iOS开发——高级语法篇&继承、实现、依赖、关联、聚合、组合的联系与区别
    iOS-性能优化4
    iOS-性能优化3
  • 原文地址:https://www.cnblogs.com/hcfan/p/9888413.html
Copyright © 2020-2023  润新知