coderstory
V2EX  ›  Java

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

  •  
  •   coderstory ·
    coderstory · Jul 28, 2021 · 3821 views
    This topic created in 1791 days ago, the information mentioned may be changed or developed.

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

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

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

    谢过各位大佬了。

    19 replies    2021-08-03 20:49:37 +08:00
    a22271001
        1
    a22271001  
       Jul 28, 2021
    用模板引擎,比如 freemark
    securityCoding
        2
    securityCoding  
       Jul 28, 2021
    模版引擎? Velocity 、Thymeleaf 看看这两个
    GuuJiang
        3
    GuuJiang  
       Jul 28, 2021 via iPhone
    我相信你需要的是 CodeModel,你生成的是 AST,它负责输出代码,完全满足你的要求
    Brentwans
        4
    Brentwans  
       Jul 28, 2021
    一定要生成代码才能解决吗?生成的代码可不好维护呀
    ic2y
        5
    ic2y  
       Jul 28, 2021
    @coderstory 感觉跟这个比较相关; https://gitee.com/mirrors/compileflow
    sheeta
        6
    sheeta  
       Jul 28, 2021
    建议使用流程引擎
    pigbug
        7
    pigbug  
       Jul 28, 2021
    我看了一下 另类的 spring boot 代码生成。github.com/spring-io/start.spring.io
    wsxyeah
        8
    wsxyeah  
       Jul 28, 2021 via iPhone
    javapoet
    zoharSoul
        9
    zoharSoul  
       Jul 28, 2021
    square 有一个 JavaPoet
    e583409
        10
    e583409  
       Jul 28, 2021
    @wsxyeah 这个很厉害 回头研究一下 一些业务代码就可以 自动生成了
    jack778
        11
    jack778  
       Jul 28, 2021
    天呐,一个流程就几个类,一百个流程几百个类? 确认不考虑维护成本吗
    coderstory
        12
    coderstory  
    OP
       Jul 28, 2021
    @jack778 流程设计还是单独保存的。。。每次修改重新生成
    coderstory
        13
    coderstory  
    OP
       Jul 28, 2021   ❤️ 1
    @sheeta 都说了本身就有引擎。。。。但人家不要
    coderstory
        14
    coderstory  
    OP
       Jul 28, 2021
    @Brentwans 那就不关我们部门的事情了 哈哈哈
    coderstory
        15
    coderstory  
    OP
       Jul 28, 2021
    @GuuJiang 啧啧 这个东西的确不错 就是原项目已经弃坑了 还好还有人 fork 出来重新维护
    dallaslu
        16
    dallaslu  
       Jul 28, 2021
    与其如此,不如设计一个流程描述文件,写个通用类去解析、执行流程。
    Cbdy
        17
    Cbdy  
       Jul 29, 2021 via Android
    建议不要生成类,而是直接生成字节码,生成类的话可能会不小心改坏掉,而且每次重新生成会产生大量代码变动,不利于维护
    hdfg159
        18
    hdfg159  
       Jul 31, 2021 via Android
    groovy 语言,生成脚本,动态执行
    liian2019
        19
    liian2019  
       Aug 3, 2021
    javapoet + asm
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2925 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 99ms · UTC 15:14 · PVG 23:14 · LAX 08:14 · JFK 11:14
    ♥ Do have faith in what you're doing.