Java 有没有优雅的办法生成类代码

2021-07-28 10:16:21 +08:00
 coderstory

现在有个 OA 系统,包含一套流程设计,比如可以设计一个请假流程,包含基本的节点,连接线,条件,switch 等功能。包含了访问数据库,访问 URL 等能力。

现在有个需求,设计好对的流程,不通过内置的简单版的流程引擎执行。而是需要把设计好的流程转成对应的 java 实现,也就是生成流程设计对应的 java 文件。最终流程执行的是 java 文件生成的 class 文件。

现在碰到了第一个问题,如何优化的生成流程对应的类。不知都有没有什么设计模式或者什么插件,可以快速方便的生成流程的 java 源码. 如果直接使用字符串拼接的方式,我感觉会有点凌乱,出问题了也不好处理,也不灵活。写出来的代码估计自己都看不懂。

谢过各位大佬了。

3075 次点击
所在节点    Java
19 条回复
a22271001
2021-07-28 10:20:16 +08:00
用模板引擎,比如 freemark
securityCoding
2021-07-28 10:20:45 +08:00
模版引擎? Velocity 、Thymeleaf 看看这两个
GuuJiang
2021-07-28 10:24:17 +08:00
我相信你需要的是 CodeModel,你生成的是 AST,它负责输出代码,完全满足你的要求
Brentwans
2021-07-28 11:36:22 +08:00
一定要生成代码才能解决吗?生成的代码可不好维护呀
ic2y
2021-07-28 11:38:47 +08:00
@coderstory 感觉跟这个比较相关; https://gitee.com/mirrors/compileflow
sheeta
2021-07-28 11:57:38 +08:00
建议使用流程引擎
pigbug
2021-07-28 12:08:38 +08:00
我看了一下 另类的 spring boot 代码生成。github.com/spring-io/start.spring.io
wsxyeah
2021-07-28 12:11:18 +08:00
javapoet
zoharSoul
2021-07-28 12:19:51 +08:00
square 有一个 JavaPoet
e583409
2021-07-28 12:20:37 +08:00
@wsxyeah 这个很厉害 回头研究一下 一些业务代码就可以 自动生成了
jack778
2021-07-28 12:50:04 +08:00
天呐,一个流程就几个类,一百个流程几百个类? 确认不考虑维护成本吗
coderstory
2021-07-28 14:15:34 +08:00
@jack778 流程设计还是单独保存的。。。每次修改重新生成
coderstory
2021-07-28 14:16:13 +08:00
@sheeta 都说了本身就有引擎。。。。但人家不要
coderstory
2021-07-28 14:16:40 +08:00
@Brentwans 那就不关我们部门的事情了 哈哈哈
coderstory
2021-07-28 14:17:57 +08:00
@GuuJiang 啧啧 这个东西的确不错 就是原项目已经弃坑了 还好还有人 fork 出来重新维护
dallaslu
2021-07-28 16:55:59 +08:00
与其如此,不如设计一个流程描述文件,写个通用类去解析、执行流程。
Cbdy
2021-07-29 09:35:48 +08:00
建议不要生成类,而是直接生成字节码,生成类的话可能会不小心改坏掉,而且每次重新生成会产生大量代码变动,不利于维护
hdfg159
2021-07-31 10:54:43 +08:00
groovy 语言,生成脚本,动态执行
liian2019
2021-08-03 20:49:37 +08:00
javapoet + asm

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/792194

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX