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
  • 相关阅读:
    在mysql中计算百分比
    给指定的div增加滚动条
    Java高效编程之三【类和接口】
    Linux(CentOS) 如何查看当前占用CPU或内存最多的K个进程
    MapReduce:详解Shuffle过程
    Java高效编程之二【对所有对象都通用的方法】
    Java高效编程之一【创建和销毁对象】
    ANT命令总结(转载)
    linux 压缩文件的命令总结
    Cloudera CDH 、Impala本地通过Parcel安装配置详解
  • 原文地址:https://www.cnblogs.com/hcfan/p/9888413.html
Copyright © 2011-2022 走看看