循环依赖的大体结构如下:
AServiceImpl
@Slf4j
@Service
@AllArgsConstructor
public class AServiceImpl extends ServiceImpl<AMapper, A> implements AService {
private final BService bService;
}
BServiceImpl
@Slf4j
@Service
@AllArgsConstructor
public class BServiceImpl extends ServiceImpl<BMapper, B> implements BService {
private final AService aService;
}
修改为
@Slf4j
@Service
@AllArgsConstructor
public class AServiceImpl extends ServiceImpl<AMapper, A> implements AService {
private final BMapper bMapper;
}
BServiceImpl
@Slf4j
@Service
@AllArgsConstructor
public class BServiceImpl extends ServiceImpl<BMapper, B> implements BService {
private final AMapper aMapper;
}
知识点:
| 维度 | Service层 | Mapper层 |
|---|
| 职责定位 | 业务逻辑处理,多服务协作 | 数据访问,仅操作数据库 |
| 依赖方向 | 可能双向依赖(如 A → B,B → A) | 单向依赖(Service → Mapper) |
| 注入复杂度 | 涉及 Bean 完整生命周期和代理机制 | 动态代理注入,无复杂初始化流程 |
| 设计模式影响 | 易因业务耦合产生循环依赖 | 天然解耦,遵循接口隔离原则 |