使用Spring AOP实现系统操作日志记录
2023-03-31 10:45:00 时间
使用Spring AOP实现系统操作日志记录
一、什么是Spring
Spring 是一个广泛应用的J2EE框架,是针对bean的生命周期进行管理的轻量级容器,主要由Spring Core、Spring AOP、Spring ORM、Spring DAO、Spring Context、Spring Web、Spring Web MVC七大模块组成。
二、什么是AOP
AOP是Aspect Oriented Programming的缩写,是面向切面编程,针对业务处理过程中的切面进行提取,降低了耦合度,提高了可重用性,经常用于日志记录、性能统计、安全控制、事务处理、异常处理等。AOP分为静态代理和动态代理,常见的AOP实现有AspectJ,Spring AOP,其中Aspect是属于静态代理,Spring AOP是动态代理,Spring AOP实现又是采用的JDK动态代理和CGLib动态代理两种方式。
三、相关术语
Aspect: 切面,在Spring中使用@Aspect注解标识,该类封装一些具体的操作,例如记录日志。
Joinpoint: 连接点,是指的是在程序运行过程中的某个阶段。
Pointcut: 切入点,定义的一个或者一组方法,当程序执行到这些切入点时,会产生通知。
@Before: 前置通知,在连接点之前执行的通知,不能阻止连接点前的执行。
@AfterReturning: 在连接点正常完成后执行的通知,不抛出异常的情况。
@AfterThrowing: 和上方刚好补充,在连接点抛出异常是执行的通知。
@After: 在连接点退出时执行的通知。异常退出和正常退出都会执行。
@Around: 环绕通知,可以在方法前后加入自定义的操作,相当于环绕包围,并且可以决定方法是否执行。
四、代码实现
@Aspect
@Component
@Slf4j
public class SysLogAspect {
/**
* Controller层切点,SysLog是自定义的注解
*/
@Pointcut("@annotation(com.xxx.xxx.SysLog)")
public void SysLogPointAspect() {
}
/**
* @Description 环绕通知 用于拦截Controller层记录用户的操作
*/
@Around("SysLogPointAspect()")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
//*========控制台输出=========*//
log.info("==============访问请求==============
");
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String requireType = request.getMethod();
String requireUrl = request.getRequestURI();
// 获取注解信息
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
SysLog syslog = method.getAnnotation(SysLog.class);
//*========数据库日志=========*//
// 保存日志到数据库.....
// 方法执行开始
long beginTime = System.currentTimeMillis();
//执行方法
Object result = joinPoint.proceed();
//执行时长(毫秒)
long execTime = System.currentTimeMillis() - beginTime;
return result;
}
}
相关文章
- 金融服务领域的大数据:即时分析
- 影响大数据、机器学习和人工智能未来发展的8个因素
- 从0开始构建一个属于你自己的PHP框架
- 如何将Hadoop集成到工作流程中?这6个优秀实践必看
- SEO公司使用大数据优化其模型的5种方法
- 关于Web Workers你需要了解的七件事
- 深入理解HTTPS原理、过程与实践
- 增强分析:数据和分析的未来
- PHP协程实现过程详解
- AI专家:大数据知识图谱——实战经验总结
- 关于PHP的错误机制总结
- 利用数据分析量化协同过滤算法的两大常见难题
- 怎么做大数据工作流调度系统?大厂架构师一语点破!
- 2019大数据处理必备的十大工具,从Linux到架构师必修
- OpenCV中的KMeans算法介绍与应用
- 教大家如果搭建一套phpstorm+wamp+xdebug调试PHP的环境
- CentOS下三种PHP拓展安装方法
- Go语言HTTP Server源码分析
- Go语言HTTP Server源码分析
- 2017年4月编程语言排行榜:Hack首次进入前五十