💡 一则也许对你有用的小广告 🏆

欢迎飞飞程序员   ,你将获得:专属的实战项目(已更新的所有会员标识的项目都能学习) / 1v1 提问 / Java 学习路线 / PHP 学习路线 / 学习打卡 / 社群讨论

  • 正在进行中的项目:《FFBlog知识付费博客项目》 正在持续更新中,基于 Spring Boot 3.x + JDK 21...,点击查看 ;
  • 《从零开发:FFBlog知识付费博客项目(全栈开发)》 演示链接: https://ffblog.ffcxy.com/  ;

截止目前, 飞飞  正在疯狂爆肝实战项目,后续还会上新更多项目,目标是将所学知识开发成项目并且分享给大家,如知识付费系统, 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 里)

  1. groupId:组织 / 公司包名(com.alibaba、org.springframework.boot)
  2. artifactId:具体工具名称
  3. version:版本号

SpringBoot 父工程管理版本时,子模块引入 starter 经常可以省略 version,自动适配兼容版本

依赖的作用

  1. 复用开源代码,不用重复造轮子
  2. 管理 jar 包版本,解决 jar 冲突
  3. 多模块项目里,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引用类

流程解释

  1. 远程 Maven 中央仓库:互联网上公共仓库,存放所有开源 jar 源码包
  2. 本地 Maven 仓库:电脑本地缓存目录,下载过一次 jar,下次不再重复联网下载
  3. pom.xml dependency:仅仅是一段声明,告诉 Maven 我需要哪个 jar
  4. 项目代码:jar 引入成功后,Java 代码直接导入类调用功能,不用手写底层实现
上一篇 什么是 spring boot 的多模块?
下一篇 Spring Initializr 是做什么用的?

全部评论(0)

头像
😃 😁 😅 😂 😍 😜 😝 🤑 🥵 🥰 😙 😎 😵 😭 😱 😖 🥳 👽 🙈 🤡 😤 💣 💯 💢 ❤️ 👍 👏 👋 👌 🤏 🙏
还没有任何评论哟~