周振林 周振林
首页
  • 前端文章

    • HTML
    • CSS
    • Tailwind CSS (opens new window)
    • JavaScript
    • Vue3
    • 其他
  • 规范
  • Spring
  • 安装教程
  • 其他教程
  • 归真医学
  • 常用药材
  • 学习笔记
  • 经方学习心得
  • 基础
  • 虚拟化
  • Docker
  • OpenStack
  • 心情杂货
关于
收藏

周振林

IT界的小学生
首页
  • 前端文章

    • HTML
    • CSS
    • Tailwind CSS (opens new window)
    • JavaScript
    • Vue3
    • 其他
  • 规范
  • Spring
  • 安装教程
  • 其他教程
  • 归真医学
  • 常用药材
  • 学习笔记
  • 经方学习心得
  • 基础
  • 虚拟化
  • Docker
  • OpenStack
  • 心情杂货
关于
收藏
  • 规范

  • Spring

    • Spring介绍
    • Spring IoC
    • Spring AOP
    • SpringBoot基础
      • SpringBoot自动配置原理
      • SpringBoot其他功能
      • SpringBoot自定义Start
      • SpringBoot 常用注解
      • SpringBoot Conditional注解
      • SpringBoot 组件注入方式
      • SpringBoot 组件Bean生命周期
      • SpringBoot过滤器
      • SpringBoot拦截器
      • SpringBoot异常
      • SpringBoot事务
      • 依赖start和依赖BOM区别
      • Thymeleaf教程
      • SpringBoot集成Modbus实现设备
      • Maven教程
      • Tree工具类,轻松搞定树结构
    • 安装教程

    • 其他教程

    • 后端
    • Spring
    周振林
    2025-09-16
    目录

    SpringBoot基础

    # SpringBoot特性

    SpringBoot 帮我们简单、快速地创建一个独立的、生产级别的 Spring 应用;大多数 SpringBoot 应用只需要编写少量配置即可快速整合 Spring 平台以及第三方技术

    • 特性:
      • 快速创建独立 Spring 应用
      • 直接嵌入Tomcat、Jetty or Undertow
      • 提供可选的 starter,简化应用整合
      • 按需自动配置 Spring 以及 第三方库
      • 提供生产级特性:如 监控指标、健康检查、外部化配置等
      • 无代码生成、无xml; 都是基于自动配置技术
    • 总结:
      • 简化开发,简化配置,简化整合,简化部署,简化监控,简化运维

    # 场景启动器

    场景启动器(Starter) 就是一个 依赖管理包,它把某个“功能场景”所需的依赖都打包好了。

    👉 你只要引入一个 starter,就能一键集成某个功能,而不用自己手动去找一堆依赖。

    比如:

    • spring-boot-starter-web → 包含了 Spring MVC + Jackson + Tomcat
    • spring-boot-starter-data-jpa → 包含了 Spring Data JPA + Hibernate + 数据库驱动依赖
    • spring-boot-starter-security → 包含了 Spring Security 所需的依赖

    Starter的作用

    • 简化依赖管理 不用你自己一个个找依赖,直接引 starter 就好。

    • 和自动配置联动 Starter 只负责引入依赖,真正帮你“配好”的是 spring-boot-autoconfigure 模块里的自动配置类。

      • 比如你引入 spring-boot-starter-web → 自动生效 WebMvcAutoConfiguration
      • 引入 spring-boot-starter-data-jpa → 自动生效 JpaRepositoriesAutoConfiguration
    • 约定优于配置 Starter 帮你选择合适的默认库和版本,你直接用默认配置就能跑。

    特点:

    1. 每一个start都是一种场景。
    2. 导入相关的场景(导入每个场景的所有依赖),拥有相关的功能。
    3. 每个场景都有一个基础依赖 spring-boot-start

    默认支持的所有场景: https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.build-systems.starters

    • 官方提供的场景:命名为:spring-boot-starter-*
    • 第三方提供场景:命名为:*-spring-boot-starter

    # 依赖管理

    # 定义

    Spring Boot提供了一个统一的依赖管理机制,帮你“管版本”,避免冲突。

    Spring Boot的依赖管理 就是通过父POM(starter-parent) 或spring-boot-dependencies 来统一管理版本,让你:

    • 不写版本号
    • 避免冲突
    • 开箱即用

    # 依赖管理的核心

    Spring Boot使用一个 “父项目”(Parent POM):

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.3.0</version>  <!-- 你的 Spring Boot 版本 -->
    </parent>
    
    1
    2
    3
    4
    5

    它里面定义了:

    • 依赖版本管理(Dependency Management): 比如规定 Spring Framework 用 6.x、Jackson 用 2.17.x 等
    • 插件管理(Plugin Management): 比如打包插件 spring-boot-maven-plugin
    • 默认配置:编码 UTF-8、Java 编译版本、资源过滤规则等

    # Spring Boot 依赖管理的两种方式

    1. 继承父POM(常见)
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.3.0</version>
    </parent>
    
    1
    2
    3
    4
    5
    1. 导入依赖管理(不想用父POM时)
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>3.3.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    👉 这种方式适合企业大项目,需要自定义父POM的时候。

    # 依赖管理的好处

    1. 不用手动指定版本 例如 spring-boot-starter-data-jdbc,你只写:
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jdbc</artifactId>
    </dependency>
    
    1
    2
    3
    4

    不需要写,因为版本已经由Spring Boot管理好了。

    1. 统一兼容性 Spring Boot 保证所有依赖版本能一起正常工作。

    # 自定义依赖版本

    哪些需要写版本号?父不管的都需要写版本

    1. version精确声明版本
     <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.0.33</version>
     </dependency>
    
    1
    2
    3
    4
    5
    1. 子覆盖父的同名属性设置 mysql.version
    <properties>
       <mysql.version>8.0.33</mysql.version>
     <properties>
    
     <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>${mysql.version}$</version>
     </dependency>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    1. 为什么导入依赖不需要写版本号? maven父子继承,父项目可以锁定版本

    2. 哪些需要写版本号? 父不管的都需要写版本

    3. 如何修改默认版本号?

    • version 精确声明版本
    • 子覆盖父的同名属性设置mysql.version
    Last Updated: 2025/10/22, 08:25:28
    Spring AOP
    SpringBoot自动配置原理

    ← Spring AOP SpringBoot自动配置原理→

    最近更新
    01
    肺
    10-24
    02
    脾胃
    10-24
    03
    肝
    10-24
    更多文章>
    Copyright © 2019-2025 鲁ICP备19032096号-1
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式