lifeOsDeveloper
V2EX  ›  问与答

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

  •  
  •   lifeOsDeveloper · Jan 9, 2025 · 2486 views
    This topic created in 664 days ago, the information mentioned may be changed or developed.
    10 replies  •  2025-01-09 15:23:34 +08:00
    IamLostInCoding
    IamLostInCoding
    Jan 9, 2025 via iPhone
    1
    lazy 一下?
    Bronya
    Bronya
    Jan 9, 2025
    2
    按道理来说不应该注入其他 Service ,真要注入的话用 @Lazy 解决。
    hidemyself
    hidemyself
    Jan 9, 2025
    3
    Facade
    reavid
    reavid
    Jan 9, 2025
    4
    一直都是注入 Service ,如果有循环依赖考虑一下你的方案,如果方案无法改就 @Lazy
    ala2008
    ala2008
    Jan 9, 2025
    5
    注入 Service 。如果实在嵌套了,考虑弄个 manger 统一管理
    EeveeRibbon
    EeveeRibbon
    Jan 9, 2025
    6
    最常可能出现循环依赖的情况是 A 表、B 表、AB 关联表三个 Service ,可以规定原则,比如只能在 AB 关联表的 Service 中注入 A 和 B ,在 A 和 B 中禁止注入 AB 关联表的 Service ,既要用到 A 也要用到 B 的就写到 AB 关联表的 Service 里面。
    Ayanokouji
    Ayanokouji
    Jan 9, 2025
    7
    可以使用 set 注入,但不能用 constructor 注入,最好不要这样做,一般是按#5 做法,搞个 manager 层
    Vaspike
    Vaspike
    Jan 9, 2025
    8
    能注入 mapper 尽量注入 mapper, 单从效率角度也要这样;
    循环依赖在大项目中很难解决的, 要么接受 spring 的循环依赖管理(1), 要么拆分为跨服务调用(2), 要么彻底优化这部分代码结构(3);
    如果你问这个问题是想进步, 请使用第三个方案
    如果你问这个问题只是怕代码跑不起来, 请使用第一个方案
    superychen
    superychen
    Jan 9, 2025
    9
    尽量是不注入的,我一般都在 biz 层搞,service 层的能力尽量聚焦在它自己本身
    wolfie
    wolfie
    Jan 9, 2025
    10
    直接依赖 mapper ,如果用的 mybatis-plus 的 ServiceImpl ,在 service-mapper 之间增加一个 repository 层。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5048 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 59ms · UTC 06:41 · PVG 14:41 · LAX 22:41 · JFK 01:41
    ♥ Do have faith in what you're doing.