自定义注解
前言
目标:将各个类及各个方法进行区分模块、区分方法操作类型,把方法内的操作记录到日志。
这篇也算是自定义注解的一个应用场景。
方案
自定义注解
在各个类和方法上标记自定义的注解
定义切面(切面对标记注解的方法进行@After或@Before之类的操作)
记录详细日志:按模块、操作类型记录到文件
代码实现
https://gitlab.com/xiguanchendian/xgcd-lab
大致扫一眼吧
联想到的
说到切面,联想到项目中依赖了第三方的jar包,可是由于业务需求,需要对其中某个特定方法进行修改(或者说压根不用它们的方法,完全按自己的业务逻辑来)。
与上面@Before、@After等不同的是,这里用到了@Around,虽然是@Around,但只是走的自己业务逻辑代码。
是否走原代码的关键在于使用@Around注解时的
proceedingJoinPoint.proceed();
@Around注解使用时需要注意一点就是,环绕通知不能改变原方法的返回值,切面方法需要有返回值来代替原方法的返回值,代码大致如下:
/** * 使用 AOP @Around后无返回值问题: * 环绕通知不能改变原方法的返回值,切面方法需要有返回值来代替原方法的返回值 * * @param proceedingJoinPoint */ @Around("logAdvicePointCut()") public Object doAround(ProceedingJoinPoint proceedingJoinPoint) { try { System.out.println("doAround before..."); Object proceed = proceedingJoinPoint.proceed(); System.out.println("doAround after..."); return proceed; } catch (Throwable throwable) { throwable.printStackTrace(); } return null; }
再次联想到的
在使用切面时,发现只有public方法才有效,private不行,难道说spring的AOP只能切public?
如果是那也太捞了,前辈们在设计之初就考虑到这个问题了,验证aop不仅能切public,连private也能切:
blablabla。。。
感谢
自定义注解详细介绍(详细易懂)
Spring AOP在pointcut expression解析表达式 并匹配多个条件
Spring实现AOP的4种方式
作者:习惯沉淀
如果文中有误或对本文有不同的见解,欢迎在评论区留言。
如果觉得文章对你有帮助,请点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
扫码关注一线码农的学习见闻与思考。
回复"大数据","微服务","架构师","面试总结",获取更多学习资源!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2018-12-19 下拉框清空与追加
2016-12-19 如何判断一条sql(update,delete)语句是否执行成功
2016-12-19 POI中getLastRowNum() 和getLastCellNum()的区别