Spring Boot 实现 AOP 动态热插拔功能 教程配套源码
立即下载
资源介绍:
该源码对应个人博客【Spring Boot 实现 AOP 动态热插拔功能】配套教程,地址:https://blog.csdn.net/lhmyy521125/article/details/140106162 小伙伴可以自行下载学习!不需要积分!不需要积分!不需要积分!
如果相关资源对您有所帮助,希望一键三连给博主一点点鼓励,后续更新更多教程和对应免费源码,如果您有任何疑问或建议,请随时留言讨论!
前言
AOP(面向切面编程)是一种强大的编程范式,可以用于日志记录、性能监控、安全检查等跨越多个模块的通用功能。实现 AOP 的动态热插拔可以让我们在不重启应用的情况下启用或禁用特定的切面,提高系统的灵活性和可维护性。
我们以一个例子来说明一下为什么需要 AOP 动态热插拔:我们系统有一个 AOP 切面,它负责了记录用户传递参数、执行时间、接口返回结果,默认是不开启的,现在因为某些原因需要检测某个接口参数接收情况 + 耗时 + 返回数据,那么我们就需要在不重启应用的情况下,动态开启关闭AOP切面来达到我们想要的效果。
package com.toher.project.dynamic;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class LoggingAspect {
@Autowired
private AspectConfig aspectConfig;
@Around("@annotation(com.toher.project.dynamic.Loggable)")
public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
if (!aspectConfig.isLoggingEnabled()) {
return joinPoint.proceed();
}
long start = System.currentTimeMillis();
Object proceed = joinPoint.proceed();
long executionTime = System.currentTimeMillis() - start;
System.out.println(joinPoint.getSignature() + " 方法执行时间 " + executionTime + "ms");
return proceed;
}
}