首页 > 其他分享 >SpringBoot的自动装配原理 简化通俗版

SpringBoot的自动装配原理 简化通俗版

时间:2024-12-27 11:59:22浏览次数:7  
标签:装配 组装 SpringBoot Spring 电脑 配置 Boot 自动 通俗

1. 想象一下你要组装一台电脑

  • 传统的方式

    • 如果你要自己组装一台电脑,你需要先确定你需要哪些部件,比如主板、CPU、内存、硬盘、显卡、电源等等。然后你要去市场上一个一个买回来,回来后还要研究每个部件的说明书,看看它们怎么连接,怎么安装,最后才能把它们组装在一起。这个过程非常繁琐,而且一不小心就可能出错,还得不断地调整和测试。
  • Spring Boot 的方式

    • Spring Boot 就像一个智能的电脑组装助手。你只需要告诉它你想要一台什么样的电脑,它就会自动帮你挑选合适的部件,并把它们组装好。你可能只需要说一句:“我想要一台可以运行办公软件的电脑。”Spring Boot 就会自动挑选出合适的主板、普通的 CPU、足够的内存、大容量的硬盘和集成显卡,然后把它们组装起来,不需要你自己去挑选和组装每个部件啦 。

2. 自动装配的原理

  • 启动器(Starter)
    • 我们可以把 Spring Boot 的启动器看作是电脑的配置套餐。就像电脑商家会提供不同的套餐,比如 “游戏电脑套餐”、“办公电脑套餐”、“设计电脑套餐” 一样。Spring Boot 的启动器,比如 spring-boot-starter-web 或 spring-boot-starter-data-jpa,它们包含了一组预先配置好的依赖,当你添加这些启动器到你的项目中,就像你选择了一个电脑套餐。

    • 例如,当你添加 spring-boot-starter-web 这个启动器时,它会自动帮你引入 Tomcat 服务器、Spring MVC 框架等一系列相关的依赖,这些依赖就像电脑套餐里的主板、CPU、内存等部件,它们已经被配置好,可以直接使用。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
  • 自动配置类

    • 自动配置类就像是电脑组装助手的 “组装手册”。Spring Boot 有很多自动配置类,它们会根据你项目中的依赖和环境,自动帮你配置各种组件。例如,当它看到你使用了 spring-boot-starter-web,它会知道你可能需要一个 Web 服务器,于是它会根据默认的配置,自动配置 Tomcat 服务器,设置好服务器的端口、处理请求的方式等等。

    • 想象一下,自动配置类就像一个电脑组装手册,上面写着:“如果用户添加了 spring-boot-starter-web,就使用 Tomcat 作为服务器,端口设置为 8080,开启 Spring MVC 模式……”Spring Boot 会根据这些手册来自动完成配置。

  • 条件装配

    • Spring Boot 还会根据条件来决定是否装配某些组件。继续用电脑的例子,假设你添加了一个高级显卡,那么自动配置可能会根据这个条件开启游戏模式,提高显卡性能;如果没有添加高级显卡,就使用普通的显示模式。

    • 在 Spring Boot 中,有一些条件注解,比如 @ConditionalOnClass@ConditionalOnMissingBean 等。例如,@ConditionalOnClass 会检查类路径中是否存在某个类,如果存在,就会进行相应的配置。如果你的项目中有 JdbcTemplate 类,Spring Boot 可能会自动配置数据源相关的组件;如果没有,就不会配置。

    • 举例说明

      假设有一个 DiscountService,你希望只有在某些条件满足时才启用这个服务。例如,只有在餐厅有促销活动时才提供折扣服务。在 Spring Boot 中,可以这样做:

import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Service;

@Service
@ConditionalOnProperty(name = "restaurant.discount.enabled", havingValue = "true")
public class DiscountService {
    // 这里是折扣服务的逻辑
    public void applyDiscount() {
        System.out.println("为客人提供折扣服务!");
    }
}
  • 这里的 @ConditionalOnProperty 注解就是一个条件。就像餐厅的经理会说:“只有当 restaurant.discount.enabled 这个属性设置为 true 时,才开启 DiscountService。” 这样,只有当你在 application.properties 或 application.yml 中添加了 restaurant.discount.enabled=true 这个配置时,Spring Boot 才会创建 DiscountService 的实例。

3. 如何实现自动装配

  • Spring Factories

    • Spring Boot 在 META-INF/spring.factories 文件中记录了很多自动配置类的信息。这个文件就像一个 “部件清单”,里面列出了各种情况下需要用到的自动配置类。

    • properties 文件中的配置启用了 Spring Boot 的自动配置功能,并指定了自定义配置类。这些配置类会在应用程序启动时被加载和应用,从而实现相应的功能配置。

    • 当 Spring Boot 启动时,它会读取这个文件,找到对应的自动配置类,然后根据条件决定是否启用这些配置。就像电脑组装助手查看部件清单,根据你选择的套餐和添加的部件,决定使用哪些组装手册一样。

    • @ComponentScan 是一个用于告诉 Spring 框架要扫描哪些包以查找组件的注解。
    • 当启动类使用 @SpringBootApplication 注解且没有显式添加 @ComponentScan 时,Spring 会自动扫描启动类所在的包及其子包,找到并管理标记为 @Component 及其派生注解的类。
  • 依赖注入

    • 一旦组件被自动配置好,Spring Boot 会通过依赖注入将它们提供给需要的地方。这就像电脑组装好后,各个部件会通过电线、插槽等连接起来,相互协作。

    • 例如,你有一个 UserService 类,Spring Boot 可以自动将 UserRepository 注入进去,这样 UserService 就可以使用 UserRepository 进行数据库操作,而不需要你手动创建 UserRepository 并连接它们。

4. 总结

  • Spring Boot 的自动装配就像是一个智能的电脑组装助手,它通过启动器为你提供不同的配置套餐,使用自动配置类和条件装配来自动配置各种组件,最后通过依赖注入将它们连接起来,让你可以轻松地开发应用程序,而不用自己去手动配置各种繁琐的组件啦 。

这样,你就可以专注于开发应用程序的核心功能,而不是花费大量时间在配置和组装上,大大提高了开发效率,就像你只需要使用电脑,而不用关心电脑是怎么组装的一样 。

标签:装配,组装,SpringBoot,Spring,电脑,配置,Boot,自动,通俗
From: https://blog.csdn.net/2401_85943192/article/details/144764405

相关文章

  • Springboot应急安全学习平台k4u90
    Springboot应急安全学习平台k4u90本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能:用户,电影类型,电影信息,电影评分,通知公告,帮助中心开题报告内容基于SpringBoot的应急安全学习平台开题内容报......
  • springboot健身房预约管理系统-计算机设计毕业源码75535
    目录1绪论1.1选题背景与意义1.2国内外研究现状1.3论文结构与章节安排2系统分析2.1可行性分析2.1.1经济可行性2.1.2技术可行性2.1.3操作可行性2.2系统流程分析2.2.1系统开发流程2.2.2用户登录流程2.2.3系统操作流程2.2.4添加信息流程2.2.......
  • Springboot 健康检查案例实现
    健康检查案例实现案例要求:能够动态的实现,健康检查的间隔时间,重试次数,动态拉去配置信息,校验发现配置变更,进行健康检查任务的动态变更1)配置远程调用Spring允许我们通过定义接口的方式,给任意位置发送http请求,实现远程调用,可以用来简化HTTP远程访问。需要webflux场景才可1.1)......
  • Java基于SpringBoot的高校社团管理系统的设计与实现-java vue.js idea
    所需该项目可以在最下面查看联系方式,为防止迷路可以收藏文章,以防后期找不到项目介绍Java基于SpringBoot的高校社团管理系统的设计与实现-javavue.jsidea系统实现截图技术栈介绍JDK版本:jdk1.8+编程语言:java框架支持:springboot数据库:mysql版本不限......
  • Java基于SpringBoot的装修公司管理平台-java vue.js idea
    所需该项目可以在最下面查看联系方式,为防止迷路可以收藏文章,以防后期找不到项目介绍Java基于SpringBoot的装修公司管理平台-javavue.jsidea系统实现截图技术栈介绍JDK版本:jdk1.8+编程语言:java框架支持:springboot数据库:mysql版本不限数据库工具:Navicat/......
  • SpringBoot事件监听器
    SpringBoot事件监听1)监听器生命周期监听监听器-SpringApplicationRunListener自定义SpringApplicationRunListener来监听事件;1.1.编写SpringApplicationRunListener实现类1.2.在META-INF/spring.factories中配置org.springframework.boot.SpringApplicationRunLi......
  • springboot英语知识应用网站的设计与实现(代码+数据库+LW)
    摘要随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了英语知识应用网站的开发全过程。通过分析英语知识应用网站管理的不足,创建了一个计算机管理英语知识应用网站的方案。文章介绍了英语知识应用网站的系统分析部分,包括可行性分......
  • springboot在线课程管理系统(代码+数据库+LW)
    摘要随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了在线课程管理系统的开发全过程。通过分析在线课程管理系统管理的不足,创建了一个计算机管理在线课程管理系统的方案。文章介绍了在线课程管理系统的系统分析部分,包括可行性分......
  • 基于SpringBoot+Vue公司员工在线餐饮管理系统的设计与实现
    博主主页:一季春秋博主简介:专注Java技术领域和毕业设计项目实战、Java微信小程序、安卓等技术开发,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联......
  • 基于SpringBoot+Vue小说阅读平台的设计与实现
    博主主页:一季春秋博主简介:专注Java技术领域和毕业设计项目实战、Java微信小程序、安卓等技术开发,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联......