Maven模块间循环依赖的解决方案以及分析

问题重现

在coding中Maven各个模块之间经常会有互相引用的问题,当A模块中需要用B模块的功能,而B模块很有可能也需要用到A模块中的功能,这样就会存在A模块中引入了B,而B模块又引用了A,项目启动时maven就会报错

报错原因分析

因为Maven结构是自下而上的,被依赖的包将会提前于使用其的包被maven打包,因此A引用了B,B引用了A,Maven不知道要将哪个包提前打包,就会报错。

具体分析

与其说是Maven循环依赖的问题,更不如说是项目结构存在问题,庞大如Spring都不存在循环依赖的问题,为什么我们自己的项目会存在这种低级错误呢,归根结底是因为对于IOC控制反转理念的理解不够到位,或者说对于IOC解决的问题以及优点理解不全面,IOC相信大家都耳熟能详,控制反转,我认为控制反转最精妙的就是将传统思维中的依赖于某个具体实现 改变为 依赖于其抽象,回想我们所使用的各种Map,各种List,是否都是

List a = new ArrayList<>();
Map b = new HashMap<>();

这无一不都是IOC控制反转的体现

解决方案

综上就可以很好的解决Maven循环依赖的问题

将接口与实现impl分模块处理,A impl模块依赖B模块的接口抽象模块,B impl模块依赖A模块的接口抽象模块,将具体实现交由spring处理,同时,entity、vo、dto等实体类应在接口模块中,如下图所示

Maven模块间循环依赖的解决方案以及分析相关推荐

  1. maven上解决循环依赖、又不想新加第三模块的方法

    maven上解决循环依赖.又不想新加第三模块的方法 参考文章: (1)maven上解决循环依赖.又不想新加第三模块的方法 (2)https://www.cnblogs.com/yuan951/p/89 ...

  2. 记因循环依赖的解决方案

    记因循环依赖的解决方案 参考文章: (1)记因循环依赖的解决方案 (2)https://www.cnblogs.com/sanshengshui/p/11839882.html (3)https:// ...

  3. Spring构造器注入循环依赖的解决方案及原理探索

    前言 我们都知道Spring解决了Setter注入或者Field注入的循环依赖问题,依靠的是三个Map(earlySingletonObjects.singletonFactories.singlet ...

  4. Maven找不到依赖终极解决方案

    离线网络环境中拷贝maven仓库到离线机器,使用maven加载项目,maven编译jar包找不到或者提示jar包信息不可用,现提供以下本人解决的方式,亲测可用 基础解决方案 常规 idea的 mave ...

  5. 02-Maven高级-分模块开发、依赖传递、聚合、继承(SpringBoot的部分底层原理)、多模块开发(环境切换)、Nexus私服搭建与使用

    文章目录 学习目标 一.分模块开发与设计 1. 分模块开发的意义 问题导入 模块拆分原则 2. 分模块开发(模块拆分) 问题导入 2.1 创建Maven模块 2.2 书写模块代码 2.3 通过mave ...

  6. JS 模块化: CommonJS 与 ESM(ECMAScript Module) 的引用机制比较 循环依赖解决方式

    JS 模块化: CommonJS 与 ESM(ECMAScript Module) 的引用机制比较 & 循环依赖解决方式 文章目录 JS 模块化: CommonJS 与 ESM(ECMAScr ...

  7. es6 依赖循环_探索 JavaScript 中的依赖管理及循环依赖

    我们通常会把项目中使用的第三方依赖写在 package.json 文件里,然后使用 npm .cnpm 或者 yarn 这些流行的依赖管理工具来帮我们管理这些依赖.但是它们是如何管理这些依赖的.它们之 ...

  8. 解鞍卸甲——手写简易版Spring框架(终):使用三级缓存解决循环依赖问题

    什么是三级缓存 按照目前我们实现的 Spring 框架,是可以满足一个基本需求的,但如果你配置了A.B两个Bean对象互相依赖,那么立马会抛出 java.lang.StackOverflowError ...

  9. 详解Spring的循环依赖

    本篇博客为学习哔哩哔哩中的黑马程序员的spring复习视频的学习笔记,仅供参考. 目录 代理的创建时机 aspectj与advisor的关系 自动后置代理处理器 循环依赖 set注入导致的循环依赖以及 ...

最新文章

  1. Debug类和Trace类的区别
  2. 减少训练成本的一个方法
  3. Error:Can’t find import 2508 in coredll.dll问题解决
  4. PHP高性能输出UNICODE正则汉字列表 汉字转拼音多音字解决方案 搜索引擎分词细胞词库更新 搜狗词库提取TXT...
  5. oracle 中DATETIME与TIMESTAMP区别
  6. spring配置dataSource:DriverManagerDataSource
  7. windows服务器安装nginx
  8. mysql c#开发库_c# 开发+MySql数据库
  9. 5G的基站覆盖范围300米,今后边远地区的手机通话怎样保证?
  10. linux IPv4报文处理浅析
  11. Java 基本语法----数组
  12. u深度制作win10系统安装盘教程
  13. 又一程序员猝死...
  14. 阿里云部署vmware报错
  15. 每日一词20190308——大地水准面(geoid)
  16. Cardboard Unity SDK Reference 翻译版
  17. ps,pr,3Dmax软件使用经验
  18. xpanx原理解析 | 只要 3 秒!抖音视频无水印下载
  19. 通信机制之异步通信和同步通信
  20. 19 个接私活平台,有技术就有钱

热门文章

  1. 基于PHP+MySQL实现(Web)英语学习与测试平台【100010284】
  2. mikrotik运行其他Linux软件,MikroTik RouterOS脚本生成器
  3. 数字逻辑 Chapter 8——可编程逻辑器件
  4. 龙芯指令系统架构及其软件生态建设
  5. 数据库的数据导入与导出
  6. tiny4412学习(二)之移植linux-4.x支持设备树
  7. 《画解数据结构》九张动图,画解顺序表
  8. 快速上手Mac的使用手册,这些方法你肯定用的上
  9. 《重庆市新型基础设施重大项目建设行动方案(2020—2022年)》来啦!
  10. Qt中文件读取的几种方式