Spring Boot从0到1 -day02

news2024/9/20 13:07:02

目录

  • 学习目标
  • Spring Boot 的基本配置
    • 启动类与核心注解@SpringBootApplication
    • Spring Boot 的全局配置文件
      • 1. application.properties
      • 2. application.yml
      • Spring 中@Spring Boot Application注解的作用
  • 自动配置原理
      • 1. 自动配置类
      • 2. 自动配置的发现
      • 示例
      • 3. 自定义自动配置
  • 条件注解
      • 使用场景
  • 总结

学习目标

Spring Boot 核心

  • Spring Boot 的基本配置
  • 自动配置原理
  • 条件注解

Spring、Spring MVC和Spring Boot之间的关系可以这样理解:

Spring是一个全面的框架,提供了核心功能,如依赖注入和事务管理。Spring
MVC是Spring的一部分,专注于构建基于MVC模式的Web应用。Spring
Boot则是基于Spring的工具,使得开发新Spring应用变得更加简单和快速,通过自动配置和约定优于配置的方式来减少开发者的工作量。


Spring Boot 的基本配置

启动类与核心注解@SpringBootApplication

在 Spring Boot 中,@SpringBootApplication 是一个核心注解,通常用于标记启动类。它实际上是一个组合注解,包含了多个其他的 Spring 注解.主要有:

  1. @SpringBootConfiguration:表示这是一个 Spring 配置类,可以包含 @Bean 方法,用来定义 bean的实例化。这个注解是 @Configuration 的别名。

  2. @ComponentScan:用于开启组件扫描,可以指定要扫描的包路径,默认情况下会扫描

  3. @EnableAutoConfiguration:启用自动配置功能,Spring Boot 会根据类路径中可用的jar包来自动配置bean,例如如果检测到 Tomcat,则会自动配置嵌入式的Tomcat。也可以通过排除某些自动配置类来定制自动配置行为。

在这里插入图片描述

Spring Boot 的全局配置文件

Spring Boot 支持多种配置文件格式,其中最常用的是 application.propertiesapplication.yml 文件。
一般位于s’r’csrc->main->resources
在这里插入图片描述

1. application.properties

application.properties 文件是一个纯文本文件,其中每个配置项都是键值对的形式,键和值之间使用等号(=)或者冒号(:)分隔。例如:

# application.properties
server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=password

2. application.yml

application.yml 文件使用 YAML 格式,它可以更好地组织配置信息,使其看起来更加清晰。例如:

# application.yml
server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: password

YAML 格式支持嵌套结构,因此可以更容易地组织和阅读配置信息。


Spring 中@Spring Boot Application注解的作用

@SpringBootApplication 注解是 Spring Boot 中的关键注解之一,它通过整合多个注解的功能,简化了应用程序的创建过程。

简化配置:通过自动配置和组件扫描,减少手动配置的工作量。
自动配置:根据类路径中的 jar 包自动配置组件和服务。
组件扫描:自动发现并装配带有特定注解的类。
配置类:允许在配置类中定义 bean。


在这里插入图片描述

Spring官方文档提供了一个非常详尽的资源库,涵盖了Spring框架及其衍生项目(如Spring Boot)的全面指南。

对于全局配置文件以及Spring Boot的配置细节,你可以直接访问Spring官方网站上的文档部分来获取最新和最权威的信息。

以下是 Spring Boot 和 Spring Framework 的官方文档链接:

  • Spring Boot 官方文档: https://docs.spring.io/spring-boot/docs/current/reference/html/
  • Spring Framework 官方文档: https://docs.spring.io/spring-framework/docs/current/reference/html/

自动配置原理

Spring Boot 的自动配置原理是其一大特色之一,它通过一系列机制使得开发者能够快速搭建应用,而无需过多关注配置细节。

1. 自动配置类

自动配置的核心在于一系列自动配置类,这些类通常位于 org.springframework.boot.autoconfigure 包及其子包内。每个自动配置类负责一个特定的功能领域,如数据库连接、日志记录、安全等。自动配置类通常使用 @EnableAutoConfiguration 注解来启用。
在这里插入图片描述

2. 自动配置的发现

Spring Boot 使用 @EnableAutoConfiguration 注解来启用自动配置功能。这个注解本身并不做任何事情,而是通过 SpringFactoriesLoader 机制来加载所有的自动配置类。SpringFactoriesLoader 会从 META-INF/spring.factories 文件中读取自动配置类的全限定名,并加载它们。

在 Spring Boot 启动过程中,AutoConfigurationImportSelector 被用来选择合适的自动配置类,并将其导入到 Spring 应用上下文中。
在这里插入图片描述
被 @EnableAutoConfiguration 触发:
当我们在 Spring Boot 应用的主类上使用 @SpringBootApplication 或 @EnableAutoConfiguration 注解时,Spring Boot 会触发自动配置机制。@EnableAutoConfiguration 注解实际上是一个元注解,它内部使用了 @Import(AutoConfigurationImportSelector.class) 来导入 AutoConfigurationImportSelector。


示例

假设我们有一个简单的 Spring Boot 应用,使用嵌入式 Tomcat 作为服务器:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[] args ) {
        SpringApplication.run(Application.class, args);
    }
}

org.springframework.boot.autoconfigure.web 包中,有一个名为 TomcatAutoConfiguration 的自动配置类,它负责配置嵌入式的 Tomcat 服务器。这个类会使用 @ConditionalOnClass 来检查是否有 Tomcat 类库,使用 @ConditionalOnMissingBean 来决定是否需要创建一个新的 Tomcat 实例等。

3. 自定义自动配置

如果你需要为自己的组件或库添加自动配置支持,可以自己编写自动配置类,并遵循上述模式。你需要:

  • 创建一个自动配置类,并使用适当的条件注解。
  • 使用 @Bean 方法来定义 bean。
  • 如果需要绑定配置属性,可以使用 @ConfigurationProperties 注解。

条件注解

条件注解(Conditional Annotations)是 Spring 框架中用于控制 Bean 创建的重要工具。这些注解允许你在不同的条件下有条件地注册或不注册 Bean,从而实现灵活的配置。在 Spring Boot中,条件注解广泛应用于自动配置类中,以决定是否应该启用某个特定的配置或 Bean。

在这里插入图片描述
所谓Spring 条件注解,就是应用程序的配置类的配置项
在这里插入图片描述

  1. @ConditionalOnClass

    • 用途:当类路径中存在某个特定类时,条件才满足。
    • 示例:如果类路径中有 EmbeddedMongo 类,则激活 MongoDB 的自动配置。
    • 代码示例
      @Configuration
      @ConditionalOnClass({ EmbeddedMongo.class })
      public class MongoAutoConfiguration {
          // 配置 MongoDB 相关的 Bean
      }
      
  2. @ConditionalOnMissingClass

    • 用途:当类路径中不存在某个特定类时,条件才满足。
    • 示例:如果类路径中没有 javax.servlet.Filter 类,则不激活与 Servlet 相关的配置。
    • 代码示例
      @Configuration
      @ConditionalOnMissingClass("javax.servlet.Filter")
      public class NonServletConfig {
          // 非 Servlet 环境下的配置
      }
      
  3. @ConditionalOnBean

    • 用途:当容器中已经存在某个特定类型的 Bean 时,条件才满足。
    • 示例:如果容器中已经有了 MyService 类型的 Bean,则激活与之相关的配置。
    • 代码示例
      @Configuration
      @ConditionalOnBean(MyService.class)
      public class MyServiceConfig {
          // 配置与 MyService 相关的其他 Bean
      }
      

使用场景

这些条件注解在 Spring Boot 的自动配置类中广泛应用,以决定是否应该激活某个特定的配置或 Bean。例如,在自动配置 MongoDB 连接时,我们可以使用 @ConditionalOnClass@ConditionalOnMissingBean 来确保只有在类路径中有 EmbeddedMongo 类且没有已存在的 Mongo Bean 时,才会创建一个新的 Mongo 实例。

总结

Spring Boot的强大之处在于其条件注解实现自动化和灵活配置。

这些注解帮助开发人员轻松构建扩展性强、配置灵活的应用而无需关注复杂配置。

通过智能地选择和配置Bean,提升了应用的健壮性和适应性。

Spring Boot自动配置依赖于一系列自动配置类,利用条件注解确定配置启用时机,并借助@EnableAutoConfiguration和SpringFactoriesLoader自动加载所需配置类。

@ConfigurationProperties简化了配置属性绑定过程。

全局配置文件如application.properties或application.yml在管理应用配置中起着关键作用,支持多环境配置确保应用在不同环境中展现不同效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2148970.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手把手教你用Ollama AnythingLLM搭建AI知识库,无需编程,跟着做就行!

在本地电脑上跑大语言模型(LLM),已经不是什么高科技操作了。随着技术的迭代,现在利用Ollam和AnythingLLM就可以轻松构建自己的本地知识库,人人皆可上手,有手就行。过往要达成这一目标,可是需要有…

令人拍案叫绝的Python条件控制技巧

目录 1. 条件控制的重要性 2. 理解条件语句的基础 3. 使用 elif 增加更多选择 4. 利用 in 和 not in 进行集合匹配 5. 利用 and 与 or 连接条件 6. 高级技巧:列表推导式中的条件表达式 7. 实战案例:自动评分系统 8. 总结 文末福利 1. 条件控制的…

计算机网络34——Windows内存管理

1、计算机体系结构 2、内存管理 分为连续分配管理和非连续分配管理 在块内存在的未使用空间叫内部碎片,在块外存在的未使用空间叫外部碎片 固定分区分配可能出现内部碎片,动态分区分配可能出现外部碎片 3、逻辑地址和实际地址的互相转换 4、缺页中断 …

渗透测试常用工具(非常详细)从零基础入门到精通,看完这一篇就够了。

对于白帽子来说,在进行渗透测试、代码审计、逆向工程等一系列工作中,都离不开安全工具的支撑,这些工具像一把把利剑,可以大大提高渗透效率。 在本篇中,我总结了超多网络安全工具,涉及暴力破解、渗透字典、…

Linux入门学习:make/Makefile(Linux项目自动化构建工具)

文章目录 1. makefile文件语法2. make clean工程清理3. 细节语法4. make原理 ⭕背景: 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中&#xff0c…

Electron 安装包 asar 解压定位问题实战

背景 在开发 Electron 过程中,我们想知道 Electron 打包的最终形态是什么样的,以便我们能更好的理解 Electron 打包的过程,以及逆向来快速追踪一些问题,例如下面这个报错,以前这类报错都是靠猜,现在则可以…

算法设计与分析(最长公共子序列

目录 最长公共子序列问题描述代码实现输出结果注意事项 小结: 最长公共子序列 最长公共子序列(Longest Common Subsequence, LCS)问题是计算给定两个序列的最长子序列的长度,这个子序列不要求连续,但需要保持相同的相…

如何在SpringCloud中使用Consul进行服务发现与配置管理

Spring Cloud是一个用于构建分布式系统的开发工具包。它提供了一系列解决方案,用于在分布式系统中管理和协调服务发现、配置管理、负载均衡、容错机制等功能。Consul是一种用于服务发现、配置管理和分布式一致性的工具,与Spring Cloud可以很好地集成在一…

程序员常用开发软件集合

文本编辑器 Sublime Text 编程工具 Visual Studio Code IntelliJ IDEA 数据连接客户端 Navicat DBeaver 远程连接客户端 WinSCP xshell WindTerm 流程图工具 draw.io 远程连接电脑工具 ToDesk 向日葵 teamviewer

在数据开发、消费中,如何科学治理重复数据难题?

解决这个问题,还得从技术系统架构和数据开发、消费的流程管理上来找原因: 一、数据集成或同步过程中有一些技术挑战,如多源异构数据集成时缺失去重策略、数据同步机制的不完善或配置错误,导致重复数据被多次引入系统;…

stable diffusion 神经网络插件 controlnet 的安装,很详细

stable diffusion 神经网络插件 controlnet 的安装,很详细 一、前言二、下载1、方式一2、方式二 一、前言 学到 stable diffusion 的 controlnet 插件,安装也略微曲折,这里做个记录。 下载前保证 github 能正常访问。 二、下载 1、方式一…

Mybatis续

步骤 爆红 点了右上角还是爆红不要着急,右下角正在下载 new 如果new的是package,用com.zhang,能事项分级 如果new的是文件夹,用com/zhang,就能实现分级。如果用com.zhang,则创建的文件夹名是com.zhang …

开源笔记Joplin本地Docker部署结合内网穿透实现多设备端同步笔记

文章目录 前言1. 安装Docker2. 自建Joplin服务器3. 搭建Joplin Sever4. 安装cpolar内网穿透5. 创建远程连接的固定公网地址 前言 本文主要介绍如何在自己的服务器上利用docker搭建 Joplin Server,并对同步进行配置,再结合cpolar内网穿透工具实现公网远程…

神经网络拟合离散标签值

神经网络拟合离散标签值 1. 数据预处理1.1 添加参数解析1.2 数据预处理逻辑1.3 标签处理逻辑1.4 构建特征和标签1.5 数据归一化、转torch1.6 实现Dataset类 2. 定义model3. 定义train脚本3.1 loss和optimizer3.2 train3.3 predict 1. 数据预处理 1.1 添加参数解析 为了方便管…

第二证券:金价涨了!创一历史之最!

当地时间周四,金融商场进一步消化美联储大幅降息50个基点的利率抉择,认为这是为了完结美国经济“软着陆”的一次防备式降息,而非紧急应对阑珊风险的降息,加之当天公布的上星期初度申请赋闲救助人数低于预期,投资者对美…

B站前端错误监控实践

前言 从23年开始,我们团队开始前端错误监控方向的开发。经历了一些列的迭代和发展,从监控SDK、上报、数据治理、看板集成、APM自研可视化初步完成了一条完整且适合B站前端监控。 截止目前(2024.08.01),前端监控在B站85%以上的业务线&#xf…

Linux运维培训班靠谱吗?如何判断一个培训班的教学质量?

当我们下定决心打算系统培训Linux运维时,哪家机构比较好成为了我们面临的最大难题。之前分享过很多培训机构的个人感受,但授人以鱼不如授人以渔,说到底那些都是我个人的看法,因此今天打算帮助大家学会如何判断一个培训班的好坏。 …

使用 SSCB 保护现代高压直流系统的优势

在各种应用中,系统效率和功率密度不断提高,这导致了更高的直流系统电压。然而,传统的电路保护解决方案不足以在保持高可靠性和安全性的同时有效保护这些高压配电系统。 固态断路器 (SSCB) 和电熔断器具有众多优点&…

GitLab 迁移并推送代码仓库

迁移并推送代码仓库到 GitLab 可以有多种方法,以下是一些常见的步骤: 一、创建空仓库 在 Gitlab 上创建一个空仓库 方式一:点击左上角“+”号,选择新建项目/仓库 方式二:进入“项目”界面,点击右上角“新建项目”按钮 选择“创建空白项目” 填写项目信息并点击“新…

从黎巴嫩电子通信设备爆炸看如何防范网络电子袭击

引言: 在当今数字化时代,电子通信设备已成为我们日常生活中不可或缺的一部分。然而,近期黎巴嫩发生的电子设备爆炸事件提醒我们,这些设备也可能成为危险的武器。本文将深入探讨电子袭击的原理、防范措施,以及网络智能…