我讨厌写一些业务代码,不仅因为它们的初衷不是我设计的,成功是产品的功劳,失败是代码的功劳会受到指责。一个重要的原因是重复的代码太多了,对于一个复杂的业务逻辑,要找到它的bug需要付出很大的努力。这里真的是苦力,不是脑力,可见多半是可怜的重复劳动。所以作为我在项目中的话语权,我会非常善待这些贫困学生。一个问题在被发现之前都是低级的,但是中间的曲折很少有人能看出来,非技术背景的管理者很难看懂。职位越高,越注重整体目标的达成,而不太注重个人感受。这不是一个好现象。千里堤崩于蚁巢。综合研发的整体水平代表着企业的竞争力。哦哦哦,我反对精英主义的言论。离这很远。下面介绍几个开发中常用的工具包,可以实现Java源文件、语法树、字节码之间的转换。用好它们,不仅可以实现一些黑科技,还可以大大提高我们的生产力。1、JavaPoet有时候,我们需要做一些代码生成工具,需要生成一些Java类源文件。如果用字符串拼接,很容易拼写的乱七八糟。为了解放双手,可以使用JavaPoet这个工具来构造方法或者代码块。它还提供了占位符等一系列便捷操作,让你生成的代码美观、可读、清爽。尤其是在写一些框架的时候,可以把一些很脏很累的工作交给它。代码示例。MethodSpecmain=MethodSpec.methodBuilder("main").addStatement("inttotal=0").beginControlFlow("for(inti=0;i<10;i++)").addStatement("total+=i;").endControlFlow().build();2.JavaCCJavaCC是一个文法生成器和一个文法分析器,它可以通过读取一个.jj(很屌,我是妹子)的描述文件来生成Java文件。听起来和JavaPoet差不多,但是是语法层面的,过程是翻译而不是“构造”,和我们学的编译原理是一个层面的。而且JavaCC生成的文件一般是不可读的。谁让它更像yacc和lex?如果你想自定义一些表达式,或者做一个特殊的格式解析器,你可能会用到它。与此类似的是ANTLR。在应用方面,Velocity和FreeMarker都使用JavaCC作为语法解释器;Hibernate使用ANTLR作为HQL的语法解释器。但我还是更喜欢Ragel(不是Java)。对于这些场景,文件生成后就不再需要依赖这些工具,高效易用更重要。2、Javaparser通过语法树生成Java文件(或其他文件)。Javaparser通过Java文件生成语法树(AST),然后根据这个语法树分析和修改Java代码。注意,它可以直接根据语法树反向生成Java文件。根据这个语法树,可以直接分析一个独立的Java文件,即使这个Java文件很乱,无法编译,也不需要在运行时使用反射等功能。配合JavaPoet可以做一些很有意思的功能。比如Javaparser提取Java文件的注释或者注解,然后通过JavaPoet生成一些自动文档(Swagger),或者自动填充测试用例。除了这些之外,Javaparser还可以指定非常严格的语法格式,因此可以将其用作代码审查工具,甚至可以做一些代码依赖分析。4.Lombok其实只是一个辅助开发工具。它应该用于大量的研究和开发。它可以显着减少代码量。让我们摆脱恼人的get、set、hashCode、equals,甚至log等。Lombok其实和上面提到的Javaparser有部分相似之处,只不过是JDK层面的。javac将Java文件解析成抽象语法树(AST)后,Lombok根据自己的注解处理器动态修改AST,添加新的节点代码。然后,生成我们最终的字节码。这个技术是通过javac的注解API(JSR-269)实现的,它允许javac在编译期间做一些事情。JDK所做的工作远不止我们表面上使用的。5.ByteBuddy的上述工具将一些其他代码转换成Java源文件。这些Java源文件需要编译后才能使用。ByteBuddy可以更进一步,直接动态生成Java类。是的,就是直接加载到元空间中的那个,类可以在程序运行过程中动态改变。不需要曲折的路径来达到目标??。它的底层是ASM,所以ByteBuddy可以直接修改字节码,是一个字节码增强工具。类似的工具还有JAVASIST、CGLiB等,如果你是做一些代理的工作,或者做一些APM等,想实现像Aspectj这样的功能,或者像Arthas这样的排错工具,那么这些工具就很适合。End上面的一些工具包比较古怪,但是完成的功能非常酷。不仅酷,而且非常有用。当领导们经常开会,用各种方法论来讨论如何管理文档、如何自动化、如何审查代码时,你就已经完成了功能。不要告诉他们!
