程式碼生成利器:IDEA強大的LiveTemplates
前言
Java 開發過程經常需要編寫有固定格式的程式碼,例如說宣告一個私有變數,logger
或者bean
等等。對於這種小範圍的程式碼生成,我們可以利用 IDEA 提供的 Live Templates
功能。剛開始覺得它只是一個簡單的Code Snippet
,後來發現它支援變數函式配置,可以支援很複雜的程式碼生成。下面我來介紹一下Live Templates
的用法。
基本使用
IDEA 自帶很多常用的動態模板,在 Java 程式碼中輸入fori
,回車就會出現
for (int i = 0; i < ; i++) {
}
按Tab
可以在各個空白處跳轉,手動填值。
自定義 Template
官方自帶模板畢竟不能滿足我們個人編碼風格的需要,Live Templates
提供了變數函式的方式供我們自定義。
簡單用法
新增自定義模板,首先需要填寫觸發單詞(即 Abbreviation),描述是可選的,然後定義模板的上下文,點選define
選擇Java
,這樣在編輯 Java 的時候就會觸發當前模板,定義完上下文之後,就可以填寫模板了。
下面列舉幾個我常用的簡單模板
==========
<out>
----------
System.out.println($END$)
==========
<pfs>
----------
private final static String $varName$ = "$var$";`
==========
<privateField>
----------
/**
* $COMMENT$
*/
@Getter
@Setter
private $TYPE$ $NAME$;
==========
<main>
----------
public static void main(String[] args) {
$END$
}
==========
模板支援變數的定義,使用$$
包圍的字元表示一個變數。$END$
是一個特殊的預定義變數,表示游標最後跳轉的位置。每個變數的位置都可以跳轉過去。
高階用法
如果你用過 vim 的Code Sinppet
外掛,你會發現模板裡面是可以執行函式的,強大的 Live Templates
當然也支援,而且 IDEA 能夠感知程式碼的語義,例如說當前編輯的函式的引數。但這一點就能夠讓我們玩出花來。我們從易到難來研究模板函式的功能。
前面我們提到的變數可以繫結函式,配置方式如上圖所示。
快速宣告變數
宣告變數是一個常用的操作,特別是需要宣告變數需要加註解,註釋的時候,這些程式碼寫起來就很枯燥。下面是我定義的模板:
<osgiRef>
----------
/**
* $END$
*/
@OsgiReference
@Setter
private $TYPE$ $NAME$;
乍一看這個模板跟我上面定義的privateField
差不多,唯一的不同在於我給這些變數繫結了函式。
-
clipboard()
:返回當前貼上板的字串 -
decapitalize()
:將輸入的字串首字母變為小寫
下面我們演示一下,我們先拷貝當前類名,然後輸入osgiRef
快速宣告 logger
宣告 logger 也是一個常用的操作,上面我們是利用了貼上函式來快速宣告變數,現在我們來利用另一個函式className()
,顧名思義,它的作用就是返回當前類名。
<logger>
----------
/** logger */
private static final Logger LOGGER = LoggerFactory.getLogger($CLASS$.class);
最強大的 groovyScript()
如果說上面用到的函式提供的能力有限,不夠靈活,那麼groovyScript()
提供了一切你想要的能力,它支援執行 Groovy 指令碼處理輸入,然後輸出處理後的字串。
groovyScript("code", ...)
| code | 一段Groovy程式碼或者Groovy指令碼程式碼絕對路徑 |
| ... | 可選入參,這些引數會繫結到`_1, _2, _3, ..._n`, 在 Groovy 程式碼中使用。|
下面我們來看一下它的實際應用。
快速 bean 配置
新增一個服務都要在 Spring 中註冊一個 bean,一般這個配置無非就是將指明id
和class
,由於我們是在 xml 中配置,所以不能利用className()
函式,但是我們可以利用clipboard()
函式獲取到類的全引用,在 IDEA 中我們直接右鍵類名,點選Copy Reference
就行。然後執行 groovy 指令碼獲取類名。
<bean>
----------
<bean id="$id$" class="$REF$" />
id
繫結decapitalize(groovyScript("_1.tokenize(`.`)[-1]", clipboard()))
,首先取clipboard()
的值得到類的全引用,然後執行 groovy 程式碼_1.tokenize(`.`)[-1]
(按.
分割為字串陣列,然後取最後一個即可得到類名,然後用decapitalize()
將首字母小寫即可得到id
。
快速列印當前上下文資訊
列印錯誤日誌的時候需要列印當前上下文資訊的,例如說入參,有時候入參很多的時候,寫起來很痛苦,好在有模板函式methodParameters()
,返回當前函式引數的列表,當然這個列表我們不能直接使用,需要結合groovyScript
對它進行轉化。
<printContext>
---------------
LogUtil.$TYPE$(LOGGER, "$MSG$ " + $params$);
將params
繫結到groovyScript("`"` + _1.collect { it + ` = [" + ` + it + ` + "]`}.join(`, `) + `"`", methodParameters())
,就能夠自動將當前函式的引數格式化後輸出。
總結
上面我們簡單介紹了常用的模板函式,其實 IDEA 還有很多其它模板函式,具體參考Creating and Editing Template Variables。IDEA 是一個很強大的工具,善用工具能夠極大的提高工作效率,將精力投入到關鍵的事情上,而不是將時間浪費在編寫重複程式碼上面。一些更高階的用法還有待大家去發掘。最後推廣一波我寫的程式碼生成外掛CodeMaker,好好利用也能節省很多重複編寫程式碼的時間。
相關文章
- 程式碼生成利器:IDEA 強大的 Live TemplatesIdea
- SmartCode—不僅僅是功能強大的程式碼生成器
- SuperSpider——打造功能強大的爬蟲利器IDE爬蟲
- idea 中使用Mybatis Generator逆向工程生成程式碼IdeaMyBatis
- 前端利器!讓AI根據手繪原型生成HTML | 教程+程式碼前端AI原型HTML
- Nova for mac 強大的程式碼編輯工具Mac
- Nova for mac(強大的程式碼編輯工具)Mac
- 程式碼生成利器-NCodeGenerate 教程(1) 遍歷資料庫內的所有表資料庫
- 強大,Nginx配置一鍵生成Nginx
- linux下生成高強度密碼的四大神器Linux密碼
- IDEA 利用groovy指令碼生成註釋Idea指令碼
- 資訊收集利器|一款功能強大的子域收集工具
- 推薦幾個IDEA外掛,Java開發者擼碼利器IdeaJava
- 提高程式設計師的幾大利器程式設計師
- 《程式碼大全》程式碼生成
- 3種生成高強度密碼的方法密碼
- 強大!Nginx 配置線上一鍵生成“神器”Nginx
- sublime text Mac版功能強大的程式碼編輯器Mac
- IDEA如何提交程式碼Idea
- 生成驗證碼程式程式碼
- 程式碼片段的管理gist+ideaIdea
- (程式碼生成)JS寫的程式碼生成器-編碼也可以這麼爽..JS
- 好用到爆!IDEA版Postman面世了,功能真心強大!IdeaPostman
- 解析程式碼的利器 Spp 語法描述語言
- yaf程式碼生成工具的使用
- 簡單的程式碼生成工具
- GridView生成的HTML程式碼ViewHTML
- 程式設計師接私活的7大平臺利器程式設計師
- 原創|強大!Nginx 配置線上一鍵生成“神器”Nginx
- UI2Code智慧生成Flutter程式碼——機器生成程式碼UIFlutter
- Java 簡潔程式碼利器 —— Lambda 表示式Java
- LoRA大模型微調的利器大模型
- golang程式碼生成工具Golang
- Go - 程式碼生成工具Go
- 程式碼生成工具(一)
- freemarker程式碼生成
- 程式碼生成器
- mybatisplus程式碼生成MyBatis