springBoot AOP切面编程
AOP 为 Aspect Oriented Programming 的缩写,意为 面向切面编程。AOP 为spring 中的一个重要内容,它是通过对既有程序定义一个切入点,然后在其前后切入不同的执行内容。
AOP 不会破坏原有程序的逻辑,很好的和业务逻辑进行隔离,耦合度低。
常用比如AOP 的日志记录。
1.pom加入AOP依赖包
<!--AOP切面 start--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <!--AOP切面 end-->
2.建立LogAspect 类,该类必须在 主程序的扫包范围内
@Aspect @Component @Slf4j public class LogAspect { @Pointcut("execution(public * 扫包路径..*.*(..))") public void LogHelp() { } @Pointcut("execution(public * 扫包路径..*.*(..))") public void LogErrorHelp() { } @Before("LogHelp()") public void doBefore(JoinPoint joinPoint) throws Throwable { // 接收到请求,记录请求内容 ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); // 记录下请求内容 System.out.println("URL : " + request.getRequestURL().toString()); System.out.println("HTTP_METHOD : " + request.getMethod()); System.out.println("IP : " + request.getRemoteAddr()); System.out.println("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName()); System.out.println("ARGS : " + Arrays.toString(joinPoint.getArgs())); } @AfterReturning(returning = "ret", pointcut = "LogHelp()") public void doAfterReturning(Object ret) throws Throwable { // 处理完请求,返回内容 System.out.println("方法的返回值 : " + ret); } @AfterThrowing("LogErrorHelp()") public void doAfterThrowing(JoinPoint jp) { System.out.println("方法异常时执行....."); System.out.println(jp.toString()); } }//end
欢迎指正:haizi2014@qq.com