spring处理循环依赖时序图_Maven依赖管理系统
【思考】
首先,简单讲述一下为什么需要这样一个系统?
不知道大家有没有思考,在一个可能有上千个模块/产品的公司,对于模块之间有较多相互依赖的情况,以下问题该如何解决:
- 我们把一个生命周期结束的组件移除之后,会有什么影响?
- 在代码修改之后,我们应该run哪些dependency测试例?
- 在一个已部署的系统中,我们最终要使用哪个version的模块?
- 是否有人使用高危版本的库?
以上问题,其核心原则就是,在所有产品的整个开发周期中,在修改某个依赖的同时,不会对其他产品造成任何影响。
【如何保存依赖关系】
之前的时候,考虑过使用键值对数据库和非关系型数据库去保存相关的依赖,但是效果都不理想,最后选用了图数据库(Neo4J).
这样做有三个好处:
- 对于任意模块,不论其是否依赖其他模块,或是被其他模块依赖,都可以很直观得在数据库中体现;
- 对于任意模块,其依赖的下级模块和上级模块可以快速地导出;
- 对于跨级依赖可以有更好的体现。
【设计】
代码结构如下:
在Model中,Dependency映射pom文件中的dependency,Project映射产品,Neo4jConn映射数据库信息。
Service中,GraphBuilder主要处理产品以及模块之间的相互依赖关系,Neo4JHandler主要处理与数据库相关的具体操作。
Util里面,Finder继承SimpleFileVisitor,处理一些路径的匹配工作,PomFileFinder利用Finder,寻找所有的pom文件并返回列表,XMLConverter利用javax.xml的工具类处理具体的xml文件。
DependencyManager作为整个程序的入口,对外提供服务。
【使用】
首先在工程目录下执行mvn clean install/package打包;
然后进入target目录下执行:
java -jar dependency-manager-0.0.1-SNAPSHOT-jar-with-dependencies.jar D:/workspace/so bolt://localhost:7687 neo4j neo4j Module org.spring*
第一个参数指定pom文件路径(默认递归到20层,超过无法识别到);
第二个参数指定数据库的url,第三个参数指定数据库用户名,第四个参数指定数据库密码;
第五个参数指定需要导出依赖关系的是产品还是模块,如果指定模块,会将所有满足条件的模块全部导出,如果只指定产品,则只导出所有产品之间的依赖关系。
第六个参数指定模块需要满足的条件,可以指定前缀,中缀,后缀,如spring*,指所有以spring开头的包,这种方式可以去掉一些我们不关注的包,比如org相关的,spring框架相关的,可以大大降低我们的工作量。
当然,你也可以直接执行:
java -jar dependency-manager-0.0.1-SNAPSHOT-jar-with-dependencies.jar
命令来获取帮助。
如图所示则执行成功:
【结果】
执行结果可以在Neo4J中查看:
红色为产品,褐色为模块。
【优化】
当然了,这只是一个小应用,还有很大的发展空间,之后会有如下几个改进:
- Dependency Manager UI可视化,可以直接将结果通过页面的方式展示给用户;
- 通过自动化的方式更新依赖关系;
- 根据模块使用情况自动发出循环依赖以及废弃库使用的警告;
- 可以跨平台使用,不局限于Maven管理的Java项目。
当然,也希望有同样想法的小伙伴可以提提设计上的意见,或者阅读过源码之后有改进的思路给到,都不胜荣幸。
【获取】
GitHub地址:https://github.com/liufarui/dependency-manager
spring处理循环依赖时序图_Maven依赖管理系统相关推荐
- spring处理循环依赖时序图_spring5源码系列--循环依赖 之 手写代码模拟spring循环依赖...
本次博客的目标 1. 手写spring循环依赖的整个过程 2. spring怎么解决循环依赖 3. 为什么要二级缓存和三级缓存 4. spring有没有解决构造函数的循环依赖 5. spring有没有 ...
- maven依赖冲突解决_Maven依赖树–解决冲突
maven依赖冲突解决 Maven Dependency Tree is very helpful in understanding the project dependencies and reso ...
- UML图详解(七)——交互图(时序图与协作图)
一.概念 交互图描述对象之间的动态合作关系以及合作过程中的行为次序. 交互图常常用来描述一个用例的行为,显示该用例中所涉及的对象以及这些对象之间的消息传递情况,即一个用例的实现过程. 交互图有顺序图和 ...
- 一步一步手绘Spring DI运行时序图(Spring 自动装配之依赖注入)
相关内容: 架构师系列内容:架构师学习笔记(持续更新) 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程) 一步一步手绘Spring IOC运行时序图二(基于XM ...
- Spring当中循环依赖很少有人讲,今天让我们来看看吧
网上关于Spring循环依赖的博客太多了,有很多都分析的很深入,写的很用心,甚至还画了时序图.流程图帮助读者理解,我看了后,感觉自己是懂了,但是闭上眼睛,总觉得还没有完全理解,总觉得还有一两个坎过不去 ...
- Spring当中循环依赖很少有人讲,今天一起来学习!
网上关于Spring循环依赖的博客太多了,有很多都分析的很深入,写的很用心,甚至还画了时序图.流程图帮助读者理解,我看了后,感觉自己是懂了,但是闭上眼睛,总觉得还没有完全理解,总觉得还有一两个坎过不去 ...
- 图解Spring解决循环依赖
点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 来源:juejin.cn/post/684490412216 ...
- spring 循环依赖_简单说说 Spring 的循环依赖
作者 | 田伟然 回首向来萧瑟处,归去,也无风雨也无晴. 杏仁工程师,关注编码和诗词. 前言 本文最耗时间的点就在于想一个好的标题, 既要灿烂夺目,又要光华内敛,事实证明这比砍需求还要难! 由于对象之 ...
- 【Spring】Spring 解决循环依赖的 3 种方式
原文:http://www.javastack.cn/article/2020/spring-cycle-depends-on-three-ways/ 循环依赖就是N个类中循环嵌套引用,如果在日常开发 ...
最新文章
- 邻接表建立图(c语言)
- Java链表的基本使用
- 计算机网络7种类型,OSPF中7种类型LSA
- 思科决定将不修复路由器中的这70多个漏洞
- JAVA中获取工程路径的方法
- JavaScript页面跳转常用代码(转)
- HttpSendRequest向服务端发送数据,构造请求http头
- matlab ROR半径滤波
- 汇编语言 emu8086软件的安装和输出Hello,world
- 剑桥: 一个完美的读书地方
- excel画风玫瑰图_教大家Excel如何绘制线性玫瑰图
- 企业为什么需要EDI?
- 小学校本课程计算机前言,《创意手工》三河小学校本课程——序言
- Windows操作系统名称与版本号汇总
- 浅谈 裴蜀定理扩展欧几里得
- 单反相机的传奇—佳能单反50年辉煌之路(连载六)
- 如何安装adb(Android Debug Bridge)
- NS3-LENA源码阅读报告(1)
- vs读取txt文件一直失败
- NSLog日志输出不全问题分析与解决方案