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