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