V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
lifeOsDeveloper
V2EX  ›  问与答

请教一下: Java Service 层应该注入其他的 service,还是 mapper,以及注入 service 可能循环依赖要怎么解决?

  •  
  •   lifeOsDeveloper · 15 小时 58 分钟前 · 585 次点击
    10 条回复    2025-01-09 15:23:34 +08:00
    IamLostInCoding
        1
    IamLostInCoding  
       14 小时 17 分钟前 via iPhone
    lazy 一下?
    Bronya
        2
    Bronya  
       14 小时 17 分钟前
    按道理来说不应该注入其他 Service ,真要注入的话用 @Lazy 解决。
    hidemyself
        3
    hidemyself  
       13 小时 56 分钟前
    Facade
    fangxisama
        4
    fangxisama  
       13 小时 51 分钟前
    一直都是注入 Service ,如果有循环依赖考虑一下你的方案,如果方案无法改就 @Lazy
    ala2008
        5
    ala2008  
       13 小时 26 分钟前
    注入 Service 。如果实在嵌套了,考虑弄个 manger 统一管理
    qiaofanxing
        6
    qiaofanxing  
       13 小时 24 分钟前
    最常可能出现循环依赖的情况是 A 表、B 表、AB 关联表三个 Service ,可以规定原则,比如只能在 AB 关联表的 Service 中注入 A 和 B ,在 A 和 B 中禁止注入 AB 关联表的 Service ,既要用到 A 也要用到 B 的就写到 AB 关联表的 Service 里面。
    Ayanokouji
        7
    Ayanokouji  
       13 小时 15 分钟前
    可以使用 set 注入,但不能用 constructor 注入,最好不要这样做,一般是按#5 做法,搞个 manager 层
    Vaspike
        8
    Vaspike  
       12 小时 43 分钟前
    能注入 mapper 尽量注入 mapper, 单从效率角度也要这样;
    循环依赖在大项目中很难解决的, 要么接受 spring 的循环依赖管理(1), 要么拆分为跨服务调用(2), 要么彻底优化这部分代码结构(3);
    如果你问这个问题是想进步, 请使用第三个方案
    如果你问这个问题只是怕代码跑不起来, 请使用第一个方案
    superychen
        9
    superychen  
       12 小时 43 分钟前
    尽量是不注入的,我一般都在 biz 层搞,service 层的能力尽量聚焦在它自己本身
    wolfie
        10
    wolfie  
       12 小时 11 分钟前
    直接依赖 mapper ,如果用的 mybatis-plus 的 ServiceImpl ,在 service-mapper 之间增加一个 repository 层。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1053 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 19:35 · PVG 03:35 · LAX 11:35 · JFK 14:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.