这里主要是为了介绍 IDEA 自带的类图分析插件 Diagrams ,熟练使用这个插件可以让我们更直观的查看类之间的关系,也可以让我们更好的读懂源码。
一、设置 Diagrams
- 打开设置界面:
File->Settings->Plugins->Installed
,查看是否有该插件(社区版 IDEA 没有该插件)
- 设置 Diagrams(有两种)
File->Settings->Tools->Diagrams
,进入Diagrams设置选项
- 进入某个 Diagrams类,右上角也可以进行
Diagrams 设置介绍
Show Difference(显示差异)
- Details(详情) :勾选此选项,在 UML 类图的修订版本中,会展示元素的所有指定详细信息;若不勾选,类图中仅包含节点元素。
Java Classes(Java 类相关 )
- Fields(字段) :勾选后,在类图中会显示类的成员变量。
- Constructors(构造函数) :勾选后,类图展示类的构造函数。
- Methods(方法) :勾选后,在类图中呈现类的方法。
- Properties(属性) :勾选可显示类中具有 get 和 set 方法的属性。
- Inner Classes(内部类) :勾选会在类图中展示类的内部类。
Dependencies(依赖关系 )
- Show One To One(显示一对一关系) :勾选后,在类图中显示类之间一对一的依赖关系。
- Show One To Many(显示一对多关系) :勾选可呈现类之间一对多的依赖关系。
- Show Usages In Code(显示在代码中的使用情况) :勾选后,在类图中展示类在代码中的使用位置等相关依赖情况。
- Show Links In Documentation(显示文档中的链接) :勾选会展示与类相关文档中的链接信息。
- Show Cyclic(显示循环依赖) :勾选后,类图中标识出存在的循环依赖关系。
- Others(其他) :可能用于显示除上述已明确类型之外的其他依赖关系或相关信息 。
Project Modules(项目模块 )
- Libraries(库) :勾选后,在模块相关的 UML 类图中显示库相关信息。
- Test dependencies(测试依赖项) :勾选会展示项目模块的测试依赖关系。
- Show Paths: Root -> Selection(显示路径:根 -> 选定内容) :勾选后,展示从项目根节点到所选节点的依赖路径。
- Show Neighbours of Selected Nodes(显示所选节点的相邻节点) :勾选可显示所选节点在依赖关系中的相邻节点。
- Show Borders(显示边界) :勾选后,在相关模块图中显示边界,让模块划分等结构更清晰。
CDI Dependencies(CDI 依赖项 )
- @Inject(注入点) :勾选后,在 CDI 依赖关系图中显示注入点相关信息。
- @Produces(生产方法和字段) :勾选会展示生产方法和字段相关信息。
- @Decorator(装饰器 Bean 类) :勾选后,在图中显示装饰器 Bean 类相关内容。
Spring Beans Dependencies(Spring Bean 依赖项 )
- Show Neighbours of Selected Nodes(显示所选节点的相邻节点) :勾选后,显示 Spring Bean 依赖关系中所选节点的相邻节点。
- Local context(本地上下文) :勾选会展示 Spring Bean 的本地上下文相关信息。
- Show beans from libraries(显示来自库的 Bean) :勾选后,显示来自外部库的 Spring Bean。
- Properties(属性) :勾选可展示 Spring Bean 的属性相关信息。
- Show Borders(显示边界) :勾选后,在 Spring Bean 依赖关系图中显示边界 。
Spring Integration(Spring 集成 )
- Show Labels(显示标签) :勾选后,在 Spring 集成相关图表中显示各类组件、通道等元素的标签,方便识别和区分不同元素 。
Gradle Dependencies(Gradle 依赖项 )
- Show ‘groupld:artifactld:version’(显示 “组 ID: 工件 ID: 版本” ) :勾选后,在 Gradle 依赖关系图中,以 “组 ID: 工件 ID: 版本” 的完整格式展示依赖项,不勾选则可能只显示部分关键信息。
- Show Paths: Root -> Selection(显示路径:根 -> 选定内容 ) :勾选会展示从项目根节点到所选 Gradle 依赖项的路径,便于了解依赖在项目结构中的位置和层级关系。
- Show Neighbours of Selected Nodes(显示所选节点的相邻节点 ) :勾选后,显示所选 Gradle 依赖项节点在依赖关系中的相邻节点,直观呈现其关联依赖 。
Maven Dependencies(Maven 依赖项 )
- Show ‘groupld:artifactld:version’(显示 “组 ID: 工件 ID: 版本” ) :勾选后,在 Maven 依赖关系图中,以完整的 “组 ID: 工件 ID: 版本” 格式展示依赖项信息,方便准确识别依赖 。
- Show Conflicts/Duplicates(显示冲突 / 重复项 ) :勾选后,在 Maven 依赖图中标识出存在冲突(如版本冲突 )或重复的依赖项,帮助排查依赖问题 。
- Show Paths: Root -> Selection(显示路径:根 -> 选定内容 ) :勾选后,展示从项目根节点到所选 Maven 依赖项的路径,有助于理清依赖层次和来源 。
- Show Neighbours of Selected Nodes(显示所选节点的相邻节点 ) :勾选后,展示所选 Maven 依赖项节点在依赖关系中的相邻节点,清晰呈现依赖关联 。
Database Schema Diagram(数据库模式图 )
- Key columns(键列) :勾选后,在数据库模式图中显示表的键列(如主键、外键列 ),帮助了解表的关键结构 。
- Columns(列) :勾选后,在图中展示数据库表的所有列信息,全面呈现表结构 。
- Virtual foreign keys(虚拟外键) :勾选后,显示数据库中的虚拟外键关系,对于理解逻辑关联很有帮助 。
- Comments(注释) :勾选后,在数据库模式图中展示表、列等元素的注释信息,便于理解设计意图和数据含义 。
Graphical Explain Plan(图形化执行计划 )
- Attributes(属性) :勾选后,在图形化执行计划图中显示执行计划相关的属性信息,如操作类型、成本、行数估计等,帮助分析查询执行效率 。
JPA ER Diagram(JPA 实体关系图 )
- Properties(属性) :勾选后,在 JPA 实体关系图中显示实体类的属性,直观呈现实体结构 。
- Embeddables(可嵌入对象) :勾选后,在图中展示可嵌入对象相关信息,体现实体类中可复用的组件结构 。
- Superclasses(超类) :勾选后,在 JPA 实体关系图中显示实体类的超类,清晰展示实体类之间的继承层次关系 。
Services diagram(服务图 )
- From tests(来自测试) :勾选后,在服务图中包含来自测试模块的服务相关信息,展示测试与服务之间的关系 。
- From libraries(来自库) :勾选后,在服务图中纳入来自库的服务相关元素,体现库对服务的支持和关联 。
- Show Neighbours of Selected Nodes(显示所选节点的相邻节点 ) :勾选后,显示所选服务节点在服务图中的相邻节点,明确服务间的关联关系 。
- Show Borders(显示边界) :勾选该选项后,在服务图中会显示各个服务组件、模块等的边界线条 。这能让不同服务单元在图中的划分更加清晰直观,帮助开发者更清楚地分辨不同服务的范围和界限,在理解服务架构、梳理服务间关系时更方便 。
二、打开 Diagrams(生成 UML 类图)
在要查看的类(文件的目录/代码区域)右键选择 Diagrams
- Show Diagram…:新增一个页面展示UML类图
- Show Diagram Popup…:新增一个弹窗(缩略图)显示UML类图
Diagrams 工具栏介绍
第一部分
- 字段显示切换(f 图标 ):点击可切换类的字段(成员变量 )在类图中的显示或隐藏状态,帮助聚焦于类的关键结构,避免过多信息干扰。
- 方法显示切换(m 图标 ):用于控制类的方法在类图中的显示与否。当类方法较多时,可按需隐藏以简化类图。
- 属性显示切换(p 图标 ):可切换类属性(通常指有 get/set 方法的特性 )在类图上的显示情况,方便筛选展示内容。
- 内部类显示切换(i 图标 ):点击能控制类的内部类是否在类图中呈现,有助于梳理类的嵌套结构。
第二部分
- 关联关系显示切换(链条图标 ):用于开启或关闭类图中元素间关联关系(如依赖、继承等连线 )的显示,可按需简化或展示完整关系。
- 节点展开 / 收缩(向下箭头图标 ):点击可展开所选类节点,显示其内部详细结构(如方法、字段 );再次点击则收缩节点,隐藏内部细节。
- 元素可见性控制(眼睛图标 ):点击弹出菜单,可选择控制类图中不同类型元素(类、接口等 )的可见性,灵活定制展示内容。
- 过滤功能(漏斗图标 ):打开过滤设置界面,可依据包名、类名、关系类型等条件过滤类图元素,仅展示符合条件的部分。
- 使用情况查看(电话听筒图标 ):点击可展示所选元素在项目中的调用位置、被引用情况等,辅助理解代码逻辑。
第三部分
- 放大(“+” 图标 ):点击可放大类图显示比例,便于查看类图细节内容。
- 缩小(“-” 图标 ):用于缩小类图显示比例,可在需要查看类图整体布局时使用。
- 显示比例数值框(如 1:1 ):显示当前类图的显示比例,也可手动输入数值精确调整缩放比例。
- 全屏切换(方形图标 ):点击可使类图进入全屏显示模式,提供更大的查看空间;再次点击退出全屏。
第四部分
- 撤销(向左箭头图标 ):点击可撤销上一步在类图上的操作(如误删元素、误调布局等 ),恢复到操作前状态。
- 恢复(类似 “Z” 字形图标 ):在执行撤销操作后,点击可恢复被撤销的操作。
- 文档(文档图标 ):点击打开与类图相关的说明文档、操作指南等,获取使用帮助。
- 列表视图(列表图标 ):以列表形式展示类图中的元素(类、接口等 ),方便批量操作或快速定位元素。
- 刷新(循环箭头图标 ):当项目代码更新后,点击可刷新类图,使其反映最新代码结构。
- 设置(齿轮图标 ):打开类图相关设置界面,可调整外观样式、布局规则、显示选项等参数。
- 帮助(问号图标 ):点击跳转至帮助文档或支持页面,获取类图功能使用过程中的问题解答
Diagrams 右键快捷菜单介绍
空白地方右键
非空白地方右键
Selected Element Actions(所选元素操作)
- Copy(复制):快捷键
Ctrl + C
。用于将选中的元素(如类、方法等 )内容复制到剪贴板,方便粘贴使用。 - Copy Reference(复制引用):快捷键
Ctrl + Alt + Shift + C
。复制选中元素的引用,常用于获取元素在项目中的引用路径等信息。 - Find Usages(查找用法):快捷键
Alt + F7
。在项目中查找选中元素的使用位置,能快速定位该元素在代码中的调用情况,辅助理解代码逻辑和依赖关系。 - Show(显示):可能会展示与选中元素相关的更多信息或视图,比如在类图中展示其详细结构、关联关系等(因未完全展示,功能可能更丰富 ) 。
- Jump to Source(跳转到源):快捷键
F4
。直接跳转到选中元素对应的源代码文件位置,便于快速查看和编辑原始代码。 - Go To(导航到):提供一系列导航选项,可快速跳转到选中元素相关的其他代码位置,如父类、实现类、声明处等。
- Open In(在… 中打开):可以在不同工具或视图中打开选中元素,比如在外部编辑器、特定工具窗口中打开。
- GitToolBox:若安装了 GitToolBox 插件,这里会提供与 Git 相关的操作选项,如查看提交历史、对比版本差异等 。
- Search with Google(用谷歌搜索):使用谷歌搜索引擎搜索与选中元素相关的内容,方便从网络获取更多资料和解决方案。
Content(内容)
- Add Class to Diagram…(添加类到图表):快捷键是空格 。用于将项目中的类添加到当前类图中,方便在已有的类图基础上补充新的类,完善类图结构。
- New(新建):可创建新的类、接口等 Java 元素,在类图相关操作场景下,方便直接从当前菜单快速创建新的代码结构并添加到类图中。
- Show Categories(显示类别):控制是否在类图中显示元素的类别信息,比如区分不同类型的类(普通类、抽象类等 )、接口等,以特定标识或分组呈现,让类图结构更清晰。
- Change Item Ordering(更改项目顺序):允许调整类图中元素(如类、接口等 )的显示顺序,按照开发者期望的方式排列,便于更好地组织和查看类图。
- Show Dependencies(显示依赖关系):决定是否在类图中展示元素之间的依赖关系,如类与类之间的继承、实现关系,类对其他类或组件的依赖等,帮助理解代码间的关联。
- Change Visibility Level(更改可见性级别):可以设置类图中元素的可见性,例如控制是否显示私有、受保护、公共的成员和类型等,按需筛选展示的代码细节。
- Change Scope(更改范围):用来调整类图所涵盖的代码范围,比如可以选择只显示当前包内的类,或者扩大到整个项目等,灵活定制类图展示的内容边界。
Show Implementations(显示实现)
快捷键Ctrl+Alt+B
(Windows/Linux )或Option+Command+B
(Mac )。点击后会展示所选类实现的接口或抽象类等的具体实现类,帮助了解接口的具体落地情况,理清类的继承与实现层次结构 。
Show Parents(显示父级)
快捷键Ctrl+Alt+P
(Windows/Linux )或Option+Command+P
(Mac )。用于显示所选类的直接父类或父接口,方便查看类的继承源头和上层结构 。
Collapse Nodes(收缩节点)
快捷键C
。将所选类节点在类图中进行收缩,隐藏类内部的详细信息(如字段、方法等 ),使类图在整体上更简洁,便于查看类与类之间的宏观关系 。
Expand Nodes(展开节点)
快捷键E
。与收缩节点相反,点击后展开所选类节点,显示类内部的字段、方法等详细信息,方便深入分析类的结构 。
Delete(删除)
快捷键Delete
。可删除在类图中选中的类节点或相关元素,在梳理类图、去除无关元素时很有用 。
Analyze Graph(分析图形)
点击后会对当前类图进行分析,可能会检查类图中的错误、循环依赖等问题,并给出相应提示或分析报告,辅助开发者优化代码结构 。
Refactor(重构)
提供与所选类相关的重构选项,比如重命名类、提取方法、内联变量等。通过这些重构操作,可以改善代码的可维护性、可读性和可扩展性 。
Analyze(分析)
对所选类或类图进行代码分析,可能包括代码复杂度分析、潜在的代码问题检测(如未使用的变量、方法 )等,帮助开发者发现代码中存在的潜在问题 。
Layout(布局)
- Orientation(方向):可设置类图的布局方向,如水平或垂直等,调整类图展示方向以满足不同的查看习惯和需求 。
- Apply Current Layout(应用当前布局):快捷键
Shift+F5
。将当前设置的布局样式应用到类图上,当对布局进行调整后,通过此操作使类图按照新布局显示 。 - Auto Route Edges(自动绘制边):快捷键
F5
。自动优化类图中元素之间连线(边 )的走向和布局,让类图中的关系连线更加规整、清晰,避免线条杂乱 。
Orientation(方向)
在类图布局中,用于设置类图的展示方向,例如可以选择水平方向或垂直方向展示类图中的元素关系,方便从不同视角查看类图结构 。
Apply Current Layout(应用当前布局)
快捷键Shift+F5
。在 IDEA 的类图(Diagrams)功能里,当你对类图的布局(如节点位置、排列方式等 )进行了手动调整,或者在 “Layout” 菜单中选择了某种布局样式后,点击此选项可将当前设定的布局应用到类图上,使类图按照新的布局规则呈现,让图形展示更符合你的需求和视觉习惯 。
Auto Route Edges(自动绘制边)
快捷键F5
。类图中元素之间的连线(边 )用于表示它们的关系(如继承、依赖等 ),当类图较为复杂时,这些连线可能会显得杂乱无章。点击此选项,IDEA 会自动优化这些连线的走向和布局,让关系线更加规整、清晰,避免相互交叉干扰,从而更直观地展示类与类之间的关系 。
Appearance(外观)
用于调整类图的外观样式,例如节点的颜色、形状,线条的粗细、颜色等,可根据个人喜好或团队规范定制类图外观,使其更美观易读 。
Behaviour(行为)
可能用于设置类图中元素的交互行为等,比如双击节点的操作响应、鼠标悬停时的提示信息等,定制类图的交互体验 。
Copy Diagram to Clipboard(将图表复制到剪贴板)
将当前展示的整个类图复制到系统剪贴板,方便粘贴到其他文档(如 Word、PPT )中进行分享、汇报等 。
Copy Selection to Clipboard(将所选内容复制到剪贴板)
仅将在类图中选中的元素(类、关系等 )复制到剪贴板,可灵活选取部分内容进行粘贴操作 。
Export Diagram(导出图表)
提供导出类图的功能,可将类图以特定格式(如图片格式 PNG、JPEG,或文档格式 PDF 等 )导出到本地,便于存档、分享给没有 IDEA 环境的人员查看
常用功能
增删类
- 添加类:
右键->Content->Add Class to Diagram
(或者在界面中直接按空格) - 删除类:
选中类->右键->Delete
(或者选中类然后按下键盘的Del键)
UML 介绍
- 绿色的‘I’是接口,蓝色的‘C’是类
- 绿色虚线是类与接口之间的实现关系
- 绿色实线是接口之间的继承关系
- 蓝色实线是类之间的继承关系
依赖模块关系图中依赖不同形式连接的含义
在一个pom.xml
,文件上右键,选择Diagrams->show Diagram...
(show Diagram Popup表示弹窗形式展示模块依赖关系图)选项后,可以展示对应模块依赖关系图。
快捷键: ctrl+F
可以输入相关包名,可以跳转到对应包名的位置
模块依赖关系图之间一共有两种形式的连接
- 蓝色实线: 正常的依赖关系
- 红色虚线: 异常的依赖关系,存在依赖冲突
注:如果要解决冲突更推荐使用Maven Helper
插件。