💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
## 引入AOP依赖 在Spring Boot中引入AOP就跟引入其他模块一样,非常简单,只需要在`pom.xml`中加入如下依赖: ~~~ <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> ~~~ * 实现一个简单请求处理:通过传入name参数,返回“hello xxx”的功能 ~~~ @RestController public class HelloController { @RequestMapping("/hello") public String hello(@RequestParam("name") String name){ return "Hello"+name; } } ~~~ ## 实现Web层的日志切面 实现AOP的切面主要有以下几个要素: * 使用`@Aspect`注解将一个java类定义为切面类 * 使用`@Pointcut`定义一个切入点,可以是一个规则表达式,比如下例中某个package下的所有函数,也可以是一个注解等。 * 根据需要在切入点不同位置的切入内容 * 使用`@Before`在切入点开始处切入内容 * 使用`@After`在切入点结尾处切入内容 * 使用`@AfterReturning`在切入点return内容之后切入内容(可以用来对处理返回值做一些加工处理) * 使用`@Around`在切入点前后切入内容,并自己控制何时执行切入点自身的内容 * 使用`@AfterThrowing`用来处理当切入内容部分抛出异常之后的处理逻辑 ~~~ /** * 使用aop前置通知拦截请求参数信息 * @author Administrator * */ @Aspect @Component public class WebLogAspect { private static final Logger logger=LoggerFactory.getLogger(WebLogAspect.class); @Pointcut("execution(public * cn.li.controller.*.*(..))") public void webLog() { } @Before("webLog()") public void doBefore(JoinPoint joinPoint) throws Throwable { // 接收到请求,记录请求内容 ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); // 记录下请求内容 logger.info("URL : " + request.getRequestURL().toString()); logger.info("HTTP_METHOD : " + request.getMethod()); logger.info("IP : " + request.getRemoteAddr()); logger.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName()); logger.info("ARGS : " + Arrays.toString(joinPoint.getArgs())); } @AfterReturning(returning = "ret", pointcut = "webLog()") public void doAfterReturning(Object ret) throws Throwable { // 处理完请求,返回内容 logger.info("RESPONSE : " + ret); } } ~~~ 通过运行程序并访问:`http://localhost:8080/hello?name=didi`,可以获得下面的日志输出 ~~~ 2019-01-07 18:40:44.050 INFO 5940 --- [nio-8080-exec-4] cn.li.aop.WebLogAspect : URL : http://localhost:8080/hello 2019-01-07 18:40:44.051 INFO 5940 --- [nio-8080-exec-4] cn.li.aop.WebLogAspect : HTTP_METHOD : GET 2019-01-07 18:40:44.051 INFO 5940 --- [nio-8080-exec-4] cn.li.aop.WebLogAspect : IP : 0:0:0:0:0:0:0:1 2019-01-07 18:40:44.054 INFO 5940 --- [nio-8080-exec-4] cn.li.aop.WebLogAspect : CLASS_METHOD : cn.li.controller.HelloController.hello 2019-01-07 18:40:44.054 INFO 5940 --- [nio-8080-exec-4] cn.li.aop.WebLogAspect : ARGS : [zhangsan] 2019-01-07 18:40:44.061 INFO 5940 --- [nio-8080-exec-4] cn.li.aop.WebLogAspect : RESPONSE : Hellozhangsan ~~~