Java 有没有优雅的办法生成类代码 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
coderstory
V2EX    Java

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

  •  
  •   coderstory
    coderstory 2021-07-28 10:16:21 +08:00 3544 次点击
    这是一个创建于 1604 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    谢过各位大佬了。

    19 条回复    2021-08-03 20:49:37 +08:00
    a22271001
        1
    a22271001  
       2021-07-28 10:20:16 +08:00
    用模板引擎,比如 freemark
    securityCoding
        2
    securityCoding  
       2021-07-28 10:20:45 +08:00
    模版引擎? Velocity 、Thymeleaf 看看这两个
    GuuJiang
        3
    GuuJiang  
       2021-07-28 10:24:17 +08:00 via iPhone
    我相信你需要的是 CodeModel,你生成的是 AST,它负责输出代码,完全满足你的要求
    Brentwans
        4
    Brentwans  
       2021-07-28 11:36:22 +08:00
    一定要生成代码才能解决吗?生成的代码可不好维护呀
    ic2y
        5
    ic2y  
       2021-07-28 11:38:47 +08:00
    @coderstory 感觉跟这个比较相关; https://gitee.com/mirrors/compileflow
    sheeta
        6
    sheeta  
       2021-07-28 11:57:38 +08:00
    建议使用流程引擎
    pigbug
        7
    pigbug  
       2021-07-28 12:08:38 +08:00
    我看了一下 另类的 spring boot 代码生成。github.com/spring-io/start.spring.io
    wsxyeah
        8
    wsxyeah  
       2021-07-28 12:11:18 +08:00 via iPhone
    javapoet
    zoharSoul
        9
    zoharSoul  
       2021-07-28 12:19:51 +08:00
    square 有一个 JavaPoet
    e583409
        10
    e583409  
       2021-07-28 12:20:37 +08:00
    @wsxyeah 这个很厉害 回头研究一下 一些业务代码就可以 自动生成了
    jack778
        11
    jack778  
       2021-07-28 12:50:04 +08:00
    天呐,一个流程就几个类,一百个流程几百个类? 确认不考虑维护成本吗
    coderstory
        12
    coderstory  
    OP
       2021-07-28 14:15:34 +08:00
    @jack778 流程设计还是单独保存的。。。每次修改重新生成
    coderstory
        13
    coderstory  
    OP
       2021-07-28 14:16:13 +08:00   1
    @sheeta 都说了本身就有引擎。。。。但人家不要
    coderstory
        14
    coderstory  
    OP
       2021-07-28 14:16:40 +08:00
    @Brentwans 那就不关我们部门的事情了 哈哈哈
    coderstory
        15
    coderstory  
    OP
       2021-07-28 14:17:57 +08:00
    @GuuJiang 啧啧 这个东西的确不错 就是原项目已经弃坑了 还好还有人 fork 出来重新维护
    dallaslu
        16
    dallaslu  
       2021-07-28 16:55:59 +08:00
    与其如此,不如设计一个流程描述文件,写个通用类去解析、执行流程。
    Cbdy
        17
    Cbdy  
       2021-07-29 09:35:48 +08:00 via Android
    建议不要生成类,而是直接生成字节码,生成类的话可能会不小心改坏掉,而且每次重新生成会产生大量代码变动,不利于维护
    hdfg159
        18
    hdfg159  
       2021-07-31 10:54:43 +08:00 via Android
    groovy 语言,生成脚本,动态执行
    liian2019
        19
    liian2019  
       2021-08-03 20:49:37 +08:00
    javapoet + asm
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2844 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 14:16 PVG 22:16 LAX 06:16 JFK 09:16
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86