spring boot 中使用AOP,需要先在pom.xml中添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
然后编写切面程序,例如:
@Aspect
@Component
public class HttpAspect {
private static final Logger logger=LoggerFactory.getLogger(HttpAspect.class);
//配置切点
@Pointcut("execution(public * com.springboot.controller.GirlController.*(..))")
public void log(){
}
//joinPoint用于获取域切入点方法有关的信息
@Before("log()")
public void doBefore(JoinPoint joinPoint){
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request=requestAttributes.getRequest();
//url
logger.info("url={}",request.getRequestURL());
//method
logger.info("method={}",request.getMethod());
//ip
logger.info("ip={}",request.getLocalAddr());
//类方法
logger.info("class_method={}",joinPoint.getSignature().getDeclaringType()+"."+joinPoint.getSignature().getName());
//方法参数
logger.info("args={}",joinPoint.getArgs());
}
@After("log()")
public void doAfter(){
logger.info("doAfter={}",2222222);
}
//得到response返回的数据,returning代表切入点方法返回的数据
@AfterReturning(returning = "object",pointcut = "log()")
public void doAfterReturning(Object object){
logger.info("response={}",object.toString());
}
}
需要在类上添加@Aspect
注解表明这是一个切面,添加@Component
注解是为了能够让spring的bean容器对齐进行管理,@Pointcut
定义切入点,@Befor
,@After
,等注解定义连接点,被这些注解的方法作为Advice(通知)织入pointcut匹配的方法中。