简明扼要的说,就是——不使用基于构造函数的依赖注入。可通过下面方式解决。
1、在字段上使用@Autowired注解,让Spring决定在合适的时机注入。
2、用基于setter方法的依赖注射取代基于构造函数的依赖注入来解决循环依赖。【推荐】
基于setter方法:
/**
* 知识库管理 服务实现类
*
* @author xq
* @since 2021-11-04
*/
@Service
public class KnowledgeBaseManagerServiceImpl extends BaseServiceImpl<KnowledgeBaseManagerMapper, KnowledgeBaseManager> implements IKnowledgeBaseManagerService {
private IRelationshipManagerService managerService;
private IKnowledgeBaseRecycleBinService recycleBinService;
@Autowired
public void setManagerService(IRelationshipManagerService managerService) {
this.managerService = managerService;
}
@Autowired
public void setRecycleBinService(IKnowledgeBaseRecycleBinService recycleBinService) {
this.recycleBinService = recycleBinService;
}
}
/**
* 知识库回收站管理 服务实现类
*
* @author xq
* @since 2021-11-04
*/
@Service
public class KnowledgeBaseRecycleBinServiceImpl extends BaseServiceImpl<KnowledgeBaseRecycleBinMapper, KnowledgeBaseRecycleBin> implements IKnowledgeBaseRecycleBinService {
private IKnowledgeBaseManagerService managerService;
@Autowired
public void setManagerService(IKnowledgeBaseManagerService managerService) {
this.managerService = managerService;
}
}
或使用@lazy懒加载注入Bean
示例:
/**
* 知识库回收站管理 服务实现类
*
* @author xq
* @since 2021-11-04
*/
@Service
public class KnowledgeBaseRecycleBinServiceImpl extends BaseServiceImpl<KnowledgeBaseRecycleBinMapper, KnowledgeBaseRecycleBin> implements IKnowledgeBaseRecycleBinService {
@Autowired
@Lazy
private IKnowledgeBaseManagerService managerService;
// @Autowired
// public void setManagerService(IKnowledgeBaseManagerService managerService) {
// this.managerService = managerService;
// }
}