七、AOP统一处理以及日志打印
基本概念
AOP 面向切面
OOP 面向对象
POP 面向过程
1、pom.xml中添加依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
2、新建一个Aspect类进行处理
package com.du.aspect; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; @Aspect @Component //把文件引入到spring容器中 public class HttpAspect { private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class); //..表示该方法内无论是任何参数都会被拦截 //(..)前面的 * 可以替换为controller中的方法名对特定方法进行拦截 @Pointcut("execution(public * com.du.controller.GrilController.*(..))") public void log(){ } @Before("log()") public void doBefore(){ logger.info("方法前"); } @After("log()") public void doAfter(){ logger.error("方法后"); } }
这里的Logger是org.slf4j包下的,spring自带的log框架
在公共方法上注解使用@Pointcut 然后在普通法上添加@Before(“方法名()”)注解,是对下面方法的简写
@Before("execution(public * com.du.controller.GrilController.*(..))")
@Before 方法前
@After 方法后
@AfterReturning 接收响应
3、根据业务逻辑在拦截的方法体内写相关代码
@Before("log()")//方法前 public void doBefore(JoinPoint joinPoint){ ServletRequestAttributes attributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); //url logger.info("url={}",request.getRequestURL()); //method logger.info("method={}",request.getMethod()); //ip logger.info("ip={}",request.getRemoteAddr()); //被调用的类方法 logger.info("class_method={}",joinPoint.getSignature().getDeclaringTypeName()+"."+joinPoint.getSignature().getName()); //参数 logger.info("args={}",joinPoint.getArgs()); } //获取响应数据 @AfterReturning(returning = "object",pointcut="log()") public void doAfterReturning(Object object){ logger.info("reponse={}",object.toString()); }
--------------------------------------------------------------------------------------------------------------------------------------------------------
目前的博客发表主要以记录笔记为主,可能部分内容有些浅显,望各路大牛勿喷,请您雅正