AOP
2024年11月17日小于 1 分钟
在SpringBoot中使用AOP需要引入以下依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
在SpringBoot中使用AOP是全注解形式,跟spring中相像(具体查看 Spring -> AOP.md)
样例
做一个日志打印输出
切面类
@Aspect
@Component // 切面类
public class LogAspect {
@Before("execution(* top.xmln.newspringboot.service..*.*(..))")
public void sysLog(JoinPoint jp) {
// 记录日志
StringJoiner log = new StringJoiner(" | ", "{", "}");
// 日期格式化
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 拼接日期
log.add(formatter.format(java.time.LocalDateTime.now()));
// 拼接方法
log.add(jp.getSignature().getName());
// 获取参数
Object[] args = jp.getArgs();
// 拼接参数
for (Object arg : args) {
log.add(arg == null ? "-" : arg.toString());
}
// 打印输出
System.out.println("日志:" + log);
}
}
接口
public interface SomeService {
void query(Integer id);
void save(User user);
}
被增强类
@Service
public class SomeServiceImpl implements SomeService {
@Override
public void query(Integer id) {
System.out.println("查询数据");
}
@Override
public void save(User user) {
System.out.println("保存数据");
}
}