简明扼要的说,就是——不使用基于构造函数的依赖注入。可通过下面方式解决。
    1、在字段上使用@Autowired注解,让Spring决定在合适的时机注入。
    2、用基于setter方法的依赖注射取代基于构造函数的依赖注入来解决循环依赖。【推荐】

    基于setter方法:

    1. /**
    2. * 知识库管理 服务实现类
    3. *
    4. * @author xq
    5. * @since 2021-11-04
    6. */
    7. @Service
    8. public class KnowledgeBaseManagerServiceImpl extends BaseServiceImpl<KnowledgeBaseManagerMapper, KnowledgeBaseManager> implements IKnowledgeBaseManagerService {
    9. private IRelationshipManagerService managerService;
    10. private IKnowledgeBaseRecycleBinService recycleBinService;
    11. @Autowired
    12. public void setManagerService(IRelationshipManagerService managerService) {
    13. this.managerService = managerService;
    14. }
    15. @Autowired
    16. public void setRecycleBinService(IKnowledgeBaseRecycleBinService recycleBinService) {
    17. this.recycleBinService = recycleBinService;
    18. }
    19. }
    1. /**
    2. * 知识库回收站管理 服务实现类
    3. *
    4. * @author xq
    5. * @since 2021-11-04
    6. */
    7. @Service
    8. public class KnowledgeBaseRecycleBinServiceImpl extends BaseServiceImpl<KnowledgeBaseRecycleBinMapper, KnowledgeBaseRecycleBin> implements IKnowledgeBaseRecycleBinService {
    9. private IKnowledgeBaseManagerService managerService;
    10. @Autowired
    11. public void setManagerService(IKnowledgeBaseManagerService managerService) {
    12. this.managerService = managerService;
    13. }
    14. }

    或使用@lazy懒加载注入Bean
    示例:

    1. /**
    2. * 知识库回收站管理 服务实现类
    3. *
    4. * @author xq
    5. * @since 2021-11-04
    6. */
    7. @Service
    8. public class KnowledgeBaseRecycleBinServiceImpl extends BaseServiceImpl<KnowledgeBaseRecycleBinMapper, KnowledgeBaseRecycleBin> implements IKnowledgeBaseRecycleBinService {
    9. @Autowired
    10. @Lazy
    11. private IKnowledgeBaseManagerService managerService;
    12. // @Autowired
    13. // public void setManagerService(IKnowledgeBaseManagerService managerService) {
    14. // this.managerService = managerService;
    15. // }
    16. }