前言Java开发过程中往往需要编写固定格式的代码,比如声明一个私有变量、logger或者bean等等。对于这种小规模的代码生成,我们可以使用IDEA提供的LiveTemplates功能。一开始我以为它只是一个简单的CodeSnippet,后来发现它支持变量函数配置,可以支持非常复杂的代码生成。下面介绍一下LiveTemplates的用法。基本上,IDEA自带了很多常用的动态模板。在Java代码中输入fori,回车,会出现for(inti=0;i<;i++){}。自定义模板官方内置的模板毕竟不能满足我们个人编码风格的需要。LiveTemplates提供了可变函数的方法供我们自定义。简单用法添加自定义模板,首先需要填写触发词(即Abbreviation),描述可选,然后定义模板的上下文,点击define选择Java,这样当当前模板就会被触发编辑Java,并定义上下文之后,就该填写模板了。下面介绍几个我常用的简单模板==========------------System.out.println($END$)==========------------privatefinalstaticString$varName$="$var$";`==========---------/***$COMMENT$@Getter@Setterprivate$TYPE$$NAME$;==========----------publicstaticvoidmain(String[]args){$END$}==========模板支持定义变量,$$包围的字符代表一个变量。是一个特殊的预定义变量,表示光标最后跳转的位置。每个变量的位置都可以跳转到。进阶使用如果你用过vim的CodeSinppet插件,你会发现功能可以在模板中执行,当然强大的LiveTemplates也支持,IDEA可以感知代码的语义,比如当前编辑函数的参数。但这就是让我们玩得开心的原因。我们从易到难探索模板函数的功能。前面我们提到的变量可以绑定到函数上,配置方法如上图所示。变量的快速声明声明变量是一个常见的操作,尤其是当你需要声明变量并且需要添加注解的时候。注释的时候,这些代码写起来很枯燥。下面是我定义的模板:------------/***$END$@OsgiReference@Setterprivate$TYPE$$NAME$;乍一看,这个模板和我上面定义的privateField很相似,唯一不同的是我给这些变量绑定了函数。1.clipboard():返回当前剪贴板的字符串2.decapitalize():将输入字符串的首字母改为小写下面来演示一下。我们先复制当前的类名,然后输入osgiRef快速声明logger和declarelogger也是一个常用的操作,上面我们使用了paste函数来快速声明变量,现在我们使用另一个函数className(),顾名思义,它的作用是返回当前的类名。<记录器>------------/**记录器*/privatestaticfinalLoggerLOGGER=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中,我们直接右击类名,点击CopyReference。然后执行groovy脚本获取类名。------------idbindingdecapitalize(groovyScript("_1.tokenize('.')[-1]",clipboard())),先取clipboard()的值得到class的全引用,然后执行groovy代码_1.tokenize('.')[-1](按.one可以得到classname,然后使用decapitalize()将首字母小写得到id快速打印当前上下文信息打印错误日志时,需要打印当前上下文信息,例如输入参数时,有时当有参数很多,写起来很痛苦,幸好有一个模板函数methodParameters(),返回一个当前函数参数的列表,当然这个列表不能直接使用,需要结合groovyScript进行转换.-------------LogUtil.$TYPE$(LOGGER,"$MSG$"+$params$);将参数绑定到groovyScript("'"'+_1.collect{it+'=["+'+it+'+"]'}.join(',')+'"'",methodParameters()),the当前函数的参数可以自动格式化输出综上所述,我们在上面简单介绍了常用的模板函数。其实IDEA还有很多其他的模板函数。有关详细信息,请参阅创建和编辑模板变量(https://www.jetbrains.com/help/idea/2016.3/creating-and-editing-template-variables.html)。IDEA是一个非常强大的工具。善用工具可以大大提高工作效率,把精力集中在关键的事情上,而不是把时间浪费在写重复的代码上。一些更高级的用法还有待发现。最后推荐一波代码生成插件CodeMaker(https://github.com/x-hansong/CodeMaker),用好它也可以节省大量重复写代码的时间。