大家都用lombok吧?其實,就拿@Slf4j來說,我一直不明白這個log對象是在哪里聲明的


lombok相信大家都在用。lombok提供了一系列的注解,可以讓我們減少很多重復性的代碼量,方便我們快速開發應用程序。比如:在model類上使用@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了,當然,model屬性的getter/setter都是如此。

 

 

那么,是這樣子的嗎?
我們去掉lombok插件,可以看到log啦、get/set啦,都變紅色了。不過這並不影響程序的正常執行,運行程序是ok的。因為上面說的,lombok會在程序build的時候生成相關的log對象,以及getter/setter。

沒有這個插件,我們可以照樣這么用log屬性,不過呢,因為沒有任何提示,只能盲打了。讓IDEA集成lombok插件,自然就不用盲打了,會有智能提示。

 


 

 

Jason曾是我組與我們一起做應用開發的小伙伴,技術嗅覺靈敏,是我的得力智囊。他已與近期離職,技術上有琢磨不明白的疑問,還是願意找他,總能給出見解。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM