代码生成利器:IDEA 强大的 Live Templates(转)

代码生成利器:IDEA 强大的 Live Templates - 文章 - 伯乐在线
http://blog.jobbole.com/110607/html

 

前言

Java 开发过程常常须要编写有固定格式的代码,例如说声明一个私有变量,logger或者bean等等。对于这种小范围的代码生成,咱们能够利用 IDEA 提供的 Live Templates功能。刚开始以为它只是一个简单的Code Snippet,后来发现它支持变量函数配置,能够支持很复杂的代码生成。下面我来介绍一下Live Templates的用法。git

基本使用

IDEA 自带不少经常使用的动态模板,在 Java 代码中输入fori,回车就会出现github


Tab能够在各个空白处跳转,手动填值。vim

自定义 Template

官方自带模板毕竟不能知足咱们我的编码风格的须要,Live Templates提供了变量函数的方式供咱们自定义。api

简单用法

新增自定义模板,首先须要填写触发单词(即 Abbreviation),描述是可选的,而后定义模板的上下文,点击define选择Java,这样在编辑 Java 的时候就会触发当前模板,定义完上下文以后,就能够填写模板了。数组


下面列举几个我经常使用的简单模板ide

模板支持变量的定义,使用$$包围的字符表示一个变量。$END$是一个特殊的预约义变量,表示光标最后跳转的位置。每一个变量的位置均可以跳转过去。函数

高级用法

若是你用过 vim 的Code Sinppet插件,你会发现模板里面是能够执行函数的,强大的 Live Templates固然也支持,并且 IDEA 可以感知代码的语义,例如说当前编辑的函数的参数。但这一点就可以让咱们玩出花来。咱们从易到难来研究模板函数的功能。

前面咱们提到的变量能够绑定函数,配置方式如上图所示。工具

快速声明变量

声明变量是一个经常使用的操做,特别是须要声明变量须要加注解,注释的时候,这些代码写起来就很枯燥。下面是我定义的模板:编码

乍一看这个模板跟我上面定义的privateField差很少,惟一的不一样在于我给这些变量绑定了函数。

  1. clipboard():返回当前粘贴板的字符串
  2. decapitalize():将输入的字符串首字母变为小写

下面咱们演示一下,咱们先拷贝当前类名,而后输入osgiRef

快速声明 logger

声明 logger 也是一个经常使用的操做,上面咱们是利用了粘贴函数来快速声明变量,如今咱们来利用另外一个函数className(),顾名思义,它的做用就是返回当前类名。

最强大的 groovyScript()

若是说上面用到的函数提供的能力有限,不够灵活,那么groovyScript()提供了一切你想要的能力,它支持执行 Groovy 脚本处理输入,而后输出处理后的字符串。

下面咱们来看一下它的实际应用。

快速 bean 配置

新增一个服务都要在 Spring 中注册一个 bean,通常这个配置无非就是将指明idclass,因为咱们是在 xml 中配置,因此不能利用className()函数,可是咱们能够利用clipboard()函数获取到类的全引用,在 IDEA 中咱们直接右键类名,点击Copy Reference就行。而后执行 groovy 脚本获取类名。

id绑定decapitalize(groovyScript("_1.tokenize('.')[-1]", clipboard())),首先取clipboard()的值获得类的全引用,而后执行 groovy 代码_1.tokenize('.')[-1](按.分割为字符串数组,而后取最后一个便可获得类名,而后用decapitalize()将首字母小写便可获得id

快速打印当前上下文信息

打印错误日志的时候须要打印当前上下文信息的,例如说入参,有时候入参不少的时候,写起来很痛苦,好在有模板函数methodParameters(),返回当前函数参数的列表,固然这个列表咱们不能直接使用,须要结合groovyScript对它进行转化。

params绑定到groovyScript("'\"' + _1.collect { it + ' = [\" + ' + it + ' + \"]'}.join(', ') + '\"'", methodParameters()),就可以自动将当前函数的参数格式化后输出。

总结

上面咱们简单介绍了经常使用的模板函数,其实 IDEA 还有不少其它模板函数,具体参考Creating and Editing Template Variables。IDEA 是一个很强大的工具,善用工具可以极大的提升工做效率,将精力投入到关键的事情上,而不是将时间浪费在编写重复代码上面。一些更高级的用法还有待你们去发掘。最后推广一波我写的代码生成插件CodeMaker,好好利用也能节省不少重复编写代码的时间。

相关文章
相关标签/搜索