Grails4 AOP使用

106 篇文章 0 订阅
102 篇文章 2 订阅

参考

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=============");
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值