一个简陋的代码生成器

    由于最近工作任务多,但是开发的内容却是千篇一律的接口开发。所以为了能够学以致用,也为了能够减少浪费生命在无效的业务工作中。于是我决定开发一个自己专用的业务代码生成工具。

    说干就干,考虑到目前所用的框架结构为springboot + dubbo。于是我需要生成大概6个文件。分别是消费者工程中的controller,req请求实体类。api工程中的响应实体类mall,服务接口service以及提供者工程中的serviceImpl类。当然还有自动生成的配置文件内容集中放在一个txt文件中。于是为了生成这几个类文件。我首先写下了如下代码:

def main(args: Array[String]): Unit = {
  val fileName = input
  actionFile(fileName)
  mallFile(fileName)
  reqFile(fileName)
  serviceFile(fileName)
  serviceImplFile(fileName)
  configFile(fileName)
}

获取输入,并生成一大堆文件。当然输入是为了手动输入文件名,然后根据文件名生成请求的url啊,文件名啊 ,方法名之类的东西。获取输入的代码如下:

命令行读入,没啥可说的。然后是创建文件的过程。以最复杂的controller(即前面的actionFile方法)为例:

根据方法名很容易理解。创建文件,创建输入流,写入important内容,写入文件头比如注解啊 ,类名啊,方法名等。然后换行写入正文,写入结尾最后关闭流。基本上所有的文件都遵从这个流程。当然有些文件较为简单就不需要全部的步骤。唯一值得一看的代码应该是创建文件的代码了,代码如下:

创建各种文件的方法其实是调用同一个方法createFile。然后传入不同的后缀名生成对应的文件。其他的代码就全是业务代码的字符串,没啥可以说的内容。动态生成的地方全在于字符串拼接,所以这里不得不赞扬一下scala的$标识符可以很方便的在字符串中嵌入变量,类似代码如下:

变量类型,注解中的url以及返回类型的动态生成都依赖于这个好用的$标识符。可以想象如果用Java来写会变成什么样(当然我不是黑我可爱的Java)。

    大概的思路和实现过程如上所述。这其实只是一个半残疾的代码生成。但是已经可以减少我的一部分工作量。未来如果有更多类似接口的开发,可能会再寻找更多的抽象点来简化工作。虽然这个代码生成器简陋而残破,却让我感受到了自己学习的一点点价值,这真是极好的。

猜你喜欢

转载自blog.csdn.net/JAVAInMyHeart/article/details/80774284