Grails4 AOP使用

参考

1、添加组件

// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-aop
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-aop', version: '2.1.10.RELEASE'

2、编写AOP(位置:src/main/java/middol.aop)

package middol.aops;

import groovy.util.logging.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Aspect
public class TestAop {
    private final static Logger logger = LoggerFactory.getLogger(TestAop.class);

    @Pointcut("execution(* middol.test.*.*(..))")
    public void test(){

    }

    @Before("test()")
    public void doBefore(JoinPoint joinPoint){
        //获取request
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        //获取response
        HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();

        System.out.println("============doBefore===========");
        System.out.println("url: {}"+ request.getRequestURL());
        System.out.println("ip: {}" + request.getRemoteHost());
        System.out.println("port: {}" + request.getRemotePort());
        System.out.println("method: {}" + request.getMethod());
        //获取类和方法
        System.out.println("class method: {}" + joinPoint.getSignature().getDeclaringTypeName()+"."+joinPoint.getSignature().getName());
        //获取参数
        System.out.println("args: {}" + joinPoint.getArgs());
    }

    @After("test()")
    public void doAfter(){
        System.out.println("=========after===========");
    }
    @AfterReturning(returning = "object", pointcut = "test()")
    public void afterReturn(Object object){
        System.out.println("===============AfterReturning=============");
    }
}

3、最后在resource.groovy中添加

import middol.aops.TestAop

// Place your Spring DSL code here
beans = {
    xmlns aop:"http://www.springframework.org/schema/aop"
    testAop(TestAop)
    aop.config("proxy-target-class":true) {}
}

或者在TestAOP上添加@Compont注解

package middol.aops;

import groovy.util.logging.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Aspect
@Component
public class TestAop {
    private static Logger logger = LoggerFactory.getLogger(TestAop.class);

    @Pointcut("execution(* middol.test.*.*(..))")
    public void test(){

    }

    @Before("test()")
    public void doBefore(JoinPoint joinPoint){
        //获取request
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        //获取response
        HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();

        logger.debug("============doBefore===========");
        System.out.println("url: {}"+ request.getRequestURL());
        System.out.println("ip: {}" + request.getRemoteHost());
        System.out.println("port: {}" + request.getRemotePort());
        System.out.println("method: {}" + request.getMethod());
        //获取类和方法
        System.out.println("class method: {}" + joinPoint.getSignature().getDeclaringTypeName()+"."+joinPoint.getSignature().getName());
        //获取参数
        System.out.println("args: {}" + joinPoint.getArgs());
    }

    @After("test()")
    public void doAfter(){
        System.out.println("=========after===========");
    }
    @AfterReturning(returning = "object", pointcut = "test()")
    public void afterReturn(Object object){
        System.out.println("===============AfterReturning=============");
    }
}
发布了102 篇原创文章 · 获赞 40 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/qq_16165281/article/details/104564992