<blockquote>
讯享网
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
目录
文章目录
前言
一、aop是什么
二、使用步骤
1.引入库
2.读入数据
总结
- 二、使用步骤
- 1.引入库
- 2.读入数据
- 总结
Spring AOP 简介
二、为什么使用 Spring AOP?
关注点分离:将业务逻辑与横切关注点分离,使代码更加清晰和模块化。
代码复用:横切关注点可以被多个业务模块重用,减少重复代码。
增强功能:通过切面(Aspect)可以在不修改原有代码的情况下,动态地增加新的功能。
简化开发:Spring AOP 提供了强大的工具和注解,使得 AOP 编程变得更加简单和直观。
如何在 Spring Boot 项目中使用 Spring AOP?
要在 Spring Boot 项目中使用 Spring AOP,首先需要在项目的 pom.xml 文件中添加 spring-boot-starter-aop 依赖。以下是具体的依赖配置:
代码如下(示例):
讯享网
代码如下(示例):
package com.xiaogung.logs.annotation; import com.xiaogung.logs.domain.enums.BusinessTypeEnum;
讯享网import java.lang.annotation.*;/
- 自定义操作日志记录注解
- @author qrxm */ @Target(ElementType.METHOD) // 注解只能用于方法 @Retention(RetentionPolicy.RUNTIME) // 修饰注解的生命周期 public @interface Log {
String value() default “”; /- 模块 */ String title() default “测试模块”;
/- 方法名称 */ String method() default “测试方法”;
/- 功能 */ BusinessTypeEnum businessType() default BusinessTypeEnum.OTHER; }
讯享网package com.xiaogung.logs.aop;import com.xiaogung.logs.annotation.Log; import com.xiaogung.logs.domain.po.SysLog; import com.xiaogung.logs.listener.EventPubListener; import com.xiaogung.logs.uilts.IpUtils; import com.xiaogung.tool.domain.po.SysUser; import com.xiaogung.tool.utils.JwtTokenUtil; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; 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 java.util.Date;@Aspect @Component @RequiredArgsConstructor public class SysLogAspect {private final JwtTokenUtil jwtTokenUtil; private final Logger logger = LoggerFactory.getLogger(SysLogAspect.class); private final EventPubListener eventPubListener; / * 以注解所标注的方法作为切入点 */ @Pointcut("@annotation(com.xiaogung.logs.annotation.Log)") public void sysLog() {} / * 在切点之后织入 * @throws Throwable */ @After("sysLog()") public void doAfter(JoinPoint joinPoint) { Log log = ((MethodSignature) joinPoint.getSignature()).getMethod() .getAnnotation(Log.class); ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder .getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); String method = request.getMethod(); String url = request.getRequestURL().toString(); String ip = IpUtils.getIpAddr(request); SysLog sysLog = new SysLog(); sysLog.setBusinessType(log.businessType().getCode()); sysLog.setTitle(log.title()); sysLog.setMethod(log.method()); sysLog.setRequestMethod(method); sysLog.setOperIp(ip); sysLog.setOperUrl(url); if(request.getHeader("Authorization")!=null){ SysUser userInfo= jwtTokenUtil.getUserNameFromToken(request.getHeader("Authorization")); sysLog.setOperName(userInfo.getUserName()); } sysLog.setOperTime(new Date()); // 发布消息 eventPubListener.pushListener(sysLog); logger.info("=======日志发送成功,内容:{}",sysLog); }}这里我没有使用异步
讯享网@Log(value = “用户登录”,title = “用户登录”,method = “POST”,businessType = BusinessTypeEnum.SELECT) @PostMapping(“/login”) @Operation(summary = “用户登录”) public Result login(@RequestBody SysUserDTO sysUserDTO){ log.info("用户登录{}",sysUserDTO);
loginVo s= sysUserService.login(sysUserDTO); 讯享网return Result.SUCCESS(s);
}
展示结果


可以看到日志记录了在看看数据库

成功了是不是很简单信息所有人都可以
如果没有成功看看是不是依赖冲突,解决办法修改依赖版本。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/159893.html