V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
coderstory
V2EX  ›  Java

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

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

    现在有个 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   ·   实用小工具   ·   1030 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 19:29 · PVG 03:29 · LAX 11:29 · JFK 14:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.