大家都用lombok吧?其实,就拿@Slf4j来说,我一直不明白这个log对象是在哪里声明的
【TIPS】如果本篇不过瘾,看这篇(buguge/p/17198071.html),时隔3年后的2023年的初春惊蛰时节,模仿lombok,我也写了一个插件工具。
lombok相信大家都在用。lombok提供了一系列的注解,可以让我们减少很多重复性的代码量,方便我们快速开发应用程序。比如:在pojo类上使用@Data,就不用再写getter/setter方法。同样,lombok还为对象提供了toString方法,给我们记日志提供了方便。再比如,使用了@Slf4j注解后,就可以直接使用log对象来记录日志了。
好,说我一直以来的疑问。就拿log来说吧。为什么加了@Slf4j注解,就可以直接使用log对象了呢?这个log对象是在哪里声明的呢?
看了一些lombok的源码,不过因为有混淆,不得其踪。百度“lombok @Slf4j log是在哪里定义的”,暂未查到,总之呢,就像同事提醒的,知道是lombok在程序编译的时候给加的就好了,不必过度追根问底,毕竟我们更应该关注应用。即:程序build时,lombok会在使用了@Slf4j注解的类里生成一个 private static final Logger log = LoggerFactory.getLogger(IdempotentController.class); 。用IDEA打开编译后的.class文件可以看到。见下面截图:
还是刚才的问题。我们在编写一个.java类时,为什么加了@Slf4j注解,类的方法里就可以直接使用这个log对象而不报错呢?鼠标放到log上面,可以看到其定义。————每次鼠标划上去看到这个定义,我都会有这个弱弱的疑问。
答案:这得益于IDEA所集成的lombok插件。从File->Settings->Plugins里可以看到。安装了这个插件,IDEA就允许我们直接使用这个log了,当然,pojo属性的getter/setter都是如此。
那么,是这样子的吗?
我们去掉lombok插件,可以看到log啦、get/set啦,都变红色了。不过这并不影响程序的正常执行,运行程序是ok的。因为上面说的,lombok会在程序build的时候生成相关的log对象,以及getter/setter。
没有这个插件,我们可以照样这么用log属性,不过呢,因为没有任何提示,只能盲打了。让IDEA集成lombok插件,自然就不用盲打了,会有智能提示。
Jason曾是我组与我们一起做应用开发的小伙伴,技术嗅觉灵敏,是我的得力智囊。他已与近期离职,技术上有琢磨不明白的疑问,还是愿意找他,总能给出见解。
当看到一些不好的代码时,会发现我还算优秀;当看到优秀的代码时,也才意识到持续学习的重要!--buguge
本文来自博客园,转载请注明原文链接:https://www.cnblogs.com/buguge/p/13232168.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· 【全网最全教程】使用最强DeepSeekR1+联网的火山引擎,没有生成长度限制,DeepSeek本体