利用SpringAOP 实现 日志输出
目的:
需要对一些事物的操作进行日志记录,如果在service内进行记录,大量的代码重复,并且维护比较麻烦。所以采用AOP的方式对service进行拦截。使用自定义注解的目的则是判断是否需要记录日志和传递额外的信息。
方式:
参考后面的参考博客
1、首先新建自定义注解
@interface 自定义注解:用来标记是否需要记录日志
@Target 注解:用于描述注解的范围,比如需要注解在方法上,值为 METHOD,其他含义如下
CONSTRUCTOR 描述构造器
FILED 描述域
LOCAL_VARIABLE 描述局部变量
METHOD 描述方法
PACKAGE 用户描述参数
TYPE 用于描述类和接口
@Retention :描述注解的生命周期,可取值:
SOURCCE 在源文件中有效
CLASS 在class 文件中有效
RUNTIME 在运行时有效
@Documented 在默认的情况下javadoc 命令不会将我们的注解生成载入到doc中,使用此,则告诉jdk让此注解生成到doc中去
@Inherited 可继承的,比如子类继承父类的注解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | package com.bkc.logging.annotaion; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target ({ElementType.METHOD}) @Retention (RetentionPolicy.RUNTIME) @Documented @Inherited public @interface LogWrite { /** * @param模块名字 */ String modelName() default "" ; /** * @param操作类型 */ String option(); } |
2、利用AOP 方式拦截
配置AOP,这里采用注解方式
使用通知,这里采用@Around 环绕通知,因为需要记录该方法是否被执行成功了
实现@Around 方法中,记录日志:获取拦截的方法,判断该方法是否含有自定义注解,如果没有则不进行记录,否则,按照自己的方式进行记录。
参考博客:Spring+SpringMVC+Mybatis 利用AOP自定义注解实现可配置日志快照记录
http://www.cnblogs.com/shipengzhi/articles/2716004.html (利用spring Aop 自定义注解解决日志和签名校验)
作者:panie
出处:http://www.cnblogs.com/panie2015/
如果您希望与我交流互动,欢迎加我微信
本文内容为作者辛苦整理书写,欢迎转载,但请保留文章出处
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?