💡 一则也许对你有用的小广告 🏆
欢迎飞飞程序员 ,你将获得:专属的实战项目(已更新的所有会员标识的项目都能学习) / 1v1 提问 / Java 学习路线 / PHP 学习路线 / 学习打卡 / 社群讨论
截止目前, 飞飞 正在疯狂爆肝实战项目,后续还会上新更多项目,目标是将所学知识开发成项目并且分享给大家,如知识付费系统, Ai系统, CMS系统,在线商城系统,等等 ,欢迎点击围观
一句话理解
依赖 = 别人已经写好、打包成 jar 的工具代码,你的项目要直接拿来用,就需要在 pom.xml(Maven)/build.gradle(Gradle)里声明【依赖】,构建工具会自动下载这些 jar 引入项目。
类比:你做饭(写业务代码),菜刀、锅、调料包就是依赖,不用自己从头打造锅具,直接拿来用。
举个直白例子
你想在 SpringBoot 里操作 MySQL,自己写连接数据库底层代码非常麻烦。 业界现成工具:MyBatis、MySQL 驱动。 你在 pom.xml 写上它们的坐标,这两行就叫引入依赖:
<!-- mysql驱动依赖 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
Maven 自动去远程仓库下载这个 jar 包,项目里就能直接使用里面的类。
Spring Boot 依赖的特点:starter(启动器)
普通 jar 依赖:只提供单一功能; spring-boot-starter-xxx 是 SpringBoot 封装好的一套组合依赖,自动配套好兼容版本,不用自己搭配一堆 jar。
常用 starter:
- spring-boot-starter-web:做 web 接口(内置 tomcat、springmvc)
- spring-boot-starter-test:单元测试
- spring-boot-starter-data-redis:操作 redis
三个关键概念区分(Maven 里)
- groupId:组织 / 公司包名(com.alibaba、org.springframework.boot)
- artifactId:具体工具名称
- version:版本号
SpringBoot 父工程管理版本时,子模块引入 starter 经常可以省略 version,自动适配兼容版本
依赖的作用
- 复用开源代码,不用重复造轮子
- 管理 jar 包版本,解决 jar 冲突
- 多模块项目里,A 模块引入 B 模块,也是依赖(模块之间互相依赖)
依赖范围 scope(简单了解)
compile(默认):编译、运行都要用
test:只单元测试用,上线打包不包含(比如 junit)
provided:编译需要,服务器运行环境自带,打包不带(比如 tomcat 相关)
和前面【多模块】关联
SpringBoot 多模块里: common、entity 这些子模块打包成 jar,在 api 模块里写 <dependency> 引入其他子模块,本质模块之间也是依赖关系。
通俗总结
写代码会用到各种第三方工具包,在配置文件声明需要哪些包,这个声明就叫依赖;Maven/Gradle 根据依赖自动下载 jar 到项目。
补充区分两个容易混淆词
✅ 依赖:你要引入什么 jar(声明) ✅ 插件 plugin:编译、打包时执行的工具(spring-boot-maven-plugin 打包插件,不属于依赖)
Maven 依赖加载流程图
远程Maven中央仓库
↓(网络下载jar包)
本地Maven仓库(~/.m2/repository)
↓(读取jar)
pom.xml 声明 dependency
↓
SpringBoot项目,代码import引用类
流程解释
- 远程 Maven 中央仓库:互联网上公共仓库,存放所有开源 jar 源码包
- 本地 Maven 仓库:电脑本地缓存目录,下载过一次 jar,下次不再重复联网下载
- pom.xml dependency:仅仅是一段声明,告诉 Maven 我需要哪个 jar
- 项目代码:jar 引入成功后,Java 代码直接导入类调用功能,不用手写底层实现