Spring Boot 核心知识点深度详解:自动化配置 (Auto-configuration) - 解锁 Spring Boot 的 “魔法”
Spring Boot 核心知识点深度详解:自动化配置 (Auto-configuration) - 解锁 Spring Boot 的 “魔法” ✨
自动化配置 (Auto-configuration) 是 Spring Boot 最核心的特性之一,也是它能够大幅简化 Spring 应用开发的关键所在。 它让 Spring Boot 应用能够 “零配置” 启动,极大地提升了开发效率和便捷性。
本文将深入剖析 Spring Boot 的自动化配置机制,让你彻底理解它的工作原理,并能更好地利用这一强大特性构建 Spring Boot 应用。
一、 什么是 Spring Boot 自动化配置? (What is Auto-configuration?)
简单来说,Spring Boot 自动化配置 指的是 Spring Boot 根据你项目的依赖和一些预定义的规则,自动帮你配置 Spring 应用所需的各种组件 (Bean)。 这意味着,你无需手动编写大量的 XML 配置或 Java 配置,Spring Boot 会 智能地帮你完成大部分配置工作。
举个例子:
假设你的 Spring Boot 项目中引入了 spring-boot-starter-web
依赖 (用于 Web 开发)。 那么 Spring Boot 的自动化配置机制就会自动帮你完成以下配置:
- 配置 Spring MVC 框架: 包括 DispatcherServlet, ViewResolver, MessageConverter 等核心组件。
- 配置内嵌的 Web 服务器: 默认情况下,会配置内嵌的 Tomcat 服务器 (你也可以选择 Jetty 或 Undertow)。
- 配置静态资源处理: 默认会配置静态资源 (例如 HTML, CSS, JavaScript, 图片) 的访问路径。
- 配置默认的错误处理页面: 当发生错误时,会显示默认的错误页面。
- … 等等
正是因为有了自动化配置,我们才能使用 Spring Boot 快速搭建一个 Web 应用,而无需编写大量的配置代码。
二、 为什么需要自动化配置? (Why Auto-configuration?)
在 Spring Boot 出现之前,传统的 Spring 应用配置通常非常繁琐,需要编写大量的 XML 配置或者 Java 配置。 例如,要配置一个 Spring MVC 应用,你需要手动配置 DispatcherServlet, ViewResolver, MessageConverter 等组件,还需要配置 Web 服务器,静态资源处理等等。 这些配置工作 既繁琐又容易出错,并且 重复性很高。
自动化配置的出现,正是为了解决传统 Spring 应用配置的痛点:
- 简化配置: 大幅减少了手动配置的工作量,让开发者可以更专注于业务逻辑,而不是繁琐的配置。
- 提高开发效率: 由于配置工作自动化完成,开发者可以更快地搭建 Spring 应用,缩短开发周期。
- 降低配置错误: 自动化配置由 Spring Boot 官方维护,配置规则经过了充分的验证和测试,可以有效降低配置错误的风险。
- 统一配置标准: 自动化配置为 Spring 应用提供了一套统一的配置标准,使得不同 Spring Boot 应用的配置风格更加一致,易于理解和维护。
总而言之,自动化配置极大地提升了 Spring 应用的开发效率和便捷性,让开发者能够更轻松地构建 Spring 应用。
三、 Spring Boot 自动化配置是如何工作的? (How Auto-configuration Works?)
Spring Boot 的自动化配置机制的核心在于 @EnableAutoConfiguration
注解 和 spring.factories
配置文件,以及 条件注解 (Conditional Annotations)。
下面我们来详细解析自动化配置的工作原理:
1. @EnableAutoConfiguration
注解: 开启自动化配置的 “开关”
@EnableAutoConfiguration
注解是开启 Spring Boot 自动化配置的 核心注解。 通常,我们会将 @EnableAutoConfiguration
注解添加到 主应用类 上 (通常和 @SpringBootApplication
注解一起使用,因为 @SpringBootApplication
注解本身就包含了 @EnableAutoConfiguration
注解)。
@EnableAutoConfiguration
注解的作用:
- 触发自动化配置: 当 Spring Boot 应用启动时,
@EnableAutoConfiguration
注解会被 Spring Boot 框架识别,从而 触发自动化配置的流程。 - 扫描
spring.factories
文件:@EnableAutoConfiguration
注解会扫描 classpath 下所有 JAR 包中的META-INF/spring.factories
文件,查找并加载其中定义的 自动化配置类 (AutoConfiguration classes)。
2. spring.factories
配置文件: 自动化配置类的 “索引”
spring.factories
文件 是一个 Properties 格式的配置文件,通常位于 JAR 包的 META-INF
目录下。 它用于 声明和注册自动化配置类 (AutoConfiguration classes)。
spring.factories
文件的作用:
- 注册自动化配置类:
spring.factories
文件中会以 键值对 的形式,注册一系列的自动化配置类。 其中,键 (Key) 通常是org.springframework.boot.autoconfigure.EnableAutoConfiguration
,值 (Value) 则是一个 逗号分隔的自动化配置类全限定名列表。
示例 spring.factories
文件内容 (来自 spring-boot-autoconfigure
JAR 包):
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
...
org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration,\
...
Spring Boot 框架会扫描 classpath 下所有 JAR 包中的 spring.factories
文件,并将其中注册的自动化配置类加载到 Spring 上下文中。
3. 自动化配置类 (AutoConfiguration Classes): 具体的配置逻辑实现者
自动化配置类 (AutoConfiguration Classes) 是 具体的配置逻辑实现者。 它们通常是 Java 配置类 (使用 @Configuration
注解),负责定义和配置各种 Spring 组件 (Bean)。
自动化配置类的特点:
@Configuration
注解: 自动化配置类本身也是一个 Spring 配置类,使用@Configuration
注解进行标记。- 条件注解 (Conditional Annotations): 自动化配置类通常会使用大量的 条件注解 (Conditional Annotations),根据不同的条件 (例如 classpath 中是否存在某个类、配置文件中是否配置了某个属性等) 来 决定是否进行自动配置。
示例 DispatcherServletAutoConfiguration
自动化配置类 (简化版):
@Configuration // 声明为配置类
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET) // 条件注解: 只有在 Web 应用环境下才进行配置
@ConditionalOnClass(DispatcherServlet.class) // 条件注解: classpath 中存在 DispatcherServlet 类才进行配置
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE) // 配置优先级
@EnableConfigurationProperties(WebMvcProperties.class) // 开启 WebMvcProperties 配置属性绑定
public class DispatcherServletAutoConfiguration {// ... 其他代码 ...@Bean(name = DEFAULT_DISPATCHER_SERVLET_BEAN_NAME)@ConditionalOnMissingBean(DispatcherServlet.class) // 条件注解: Spring 上下文中不存在 DispatcherServlet Bean 才进行配置public DispatcherServlet dispatcherServlet(WebMvcProperties webMvcProperties,MultipartResolver multipartResolver, WebApplicationContext webApplicationContext) {DispatcherServlet dispatcherServlet = new DispatcherServlet();// ... 配置 DispatcherServlet ...return dispatcherServlet;}// ... 其他 Bean 组件配置 ...
}
可以看到,DispatcherServletAutoConfiguration
类使用了多个条件注解:
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
: 表示只有在 Servlet Web 应用环境 下才进行配置。@ConditionalOnClass(DispatcherServlet.class)
: 表示只有当 classpath 中存在DispatcherServlet
类 时才进行配置 (意味着项目中引入了 Spring MVC 相关的依赖)。@ConditionalOnMissingBean(DispatcherServlet.class)
: 表示只有当 Spring 上下文中不存在DispatcherServlet
Bean 时才进行配置 (避免用户自定义的DispatcherServlet
Bean 被覆盖)。
通过条件注解的灵活组合,自动化配置类可以根据不同的条件,智能地决定是否进行自动配置,以及配置哪些组件。
四、 Spring Boot 常用条件注解 (Conditional Annotations)
条件注解 (Conditional Annotations) 是 Spring Boot 自动化配置机制的 核心灵魂。 它们赋予了自动化配置类 智能判断和灵活配置的能力。
Spring Boot 提供了丰富的条件注解,常用的条件注解包括:
@ConditionalOnClass(value)
: 当指定的类存在时 才会进行配置。 例如@ConditionalOnClass(DispatcherServlet.class)
表示只有当 classpath 中存在DispatcherServlet
类时才进行配置。@ConditionalOnMissingClass(value)
: 当指定的类不存在时 才会进行配置。@ConditionalOnBean(value)
: 当指定的 Bean 组件存在于 Spring 上下文中时 才会进行配置。 例如@ConditionalOnBean(DataSource.class)
表示只有当 Spring 上下文中存在DataSource
Bean 时才进行配置。@ConditionalOnMissingBean(value)
: 当指定的 Bean 组件不存在于 Spring 上下文中时 才会进行配置。 例如@ConditionalOnMissingBean(DataSource.class)
表示只有当 Spring 上下文中不存在DataSource
Bean 时才进行配置 (通常用于配置默认的 Bean 组件)。@ConditionalOnProperty(name, havingValue, matchIfMissing)
: 当指定的配置属性满足条件时 才会进行配置。name
: 配置属性的名称。havingValue
: 配置属性需要匹配的值。matchIfMissing
: 当配置属性缺失时是否匹配 (默认为false
,表示缺失时不匹配)。- 例如
@ConditionalOnProperty(name = "spring.mvc.view.suffix", havingValue = ".jsp")
表示只有当配置文件中spring.mvc.view.suffix
属性的值为.jsp
时才进行配置。
@ConditionalOnResource(resources)
: 当指定的资源存在时 才会进行配置。 例如@ConditionalOnResource(resources = "classpath:application.properties")
表示只有当 classpath 下存在application.properties
文件时才进行配置。@ConditionalOnWebApplication(type)
: 当应用是 Web 应用时 才会进行配置。 可以指定 Web 应用的类型 (例如 Servlet, Reactive)。 例如@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
表示只有当应用是 Servlet Web 应用时才进行配置。@ConditionalOnNotWebApplication(type)
: 当应用不是 Web 应用时 才会进行配置。
通过灵活运用这些条件注解,Spring Boot 的自动化配置机制可以根据不同的环境和依赖,智能地进行配置,实现 “按需配置” 的效果。
五、 如何自定义和影响 Spring Boot 自动化配置? (Customizing Auto-configuration)
虽然 Spring Boot 的自动化配置已经非常强大,但在某些情况下,你可能需要 自定义或影响自动化配置的行为,例如:
- 排除特定的自动化配置: 你可能不希望 Spring Boot 自动配置某些组件,例如你想要完全自定义
DataSource
的配置,而不是使用 Spring Boot 默认的DataSourceAutoConfiguration
。 - 覆盖默认的自动化配置: 你可能希望使用自己的配置来覆盖 Spring Boot 默认的自动化配置,例如你想要使用自己实现的
DispatcherServlet
Bean 来替换 Spring Boot 默认的DispatcherServlet
Bean。
Spring Boot 提供了多种方式来自定义和影响自动化配置:
1. 使用 @SpringBootApplication(exclude = ...)
排除特定的自动化配置类
在 @SpringBootApplication
注解中,可以使用 exclude
属性来 排除特定的自动化配置类,阻止 Spring Boot 自动配置这些类。
示例: 排除 DataSourceAutoConfiguration
自动化配置类
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) // 排除 DataSourceAutoConfiguration
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}
通过 exclude
属性,你可以精确地控制哪些自动化配置类不被加载,从而实现更精细的自定义。
2. 使用 @Configuration
配置类覆盖默认的自动化配置
如果你想要 覆盖 Spring Boot 默认的自动化配置,例如使用自定义的 Bean 组件替换默认的 Bean 组件,你可以 在自己的 @Configuration
配置类中定义同名的 Bean 组件。
示例: 自定义 DispatcherServlet
Bean 覆盖默认的 DispatcherServlet
Bean
@Configuration
public class WebConfig {@Bean(name = DispatcherServletAutoConfiguration.DEFAULT_DISPATCHER_SERVLET_BEAN_NAME) // 使用默认的 Bean 名称public DispatcherServlet myDispatcherServlet() {DispatcherServlet dispatcherServlet = new DispatcherServlet();// ... 自定义 DispatcherServlet 的配置 ...return dispatcherServlet;}
}
由于 Spring Boot 容器中,后注册的 Bean 组件会覆盖同名的 Bean 组件,因此你自定义的 myDispatcherServlet
Bean 会覆盖 DispatcherServletAutoConfiguration
自动化配置类中定义的默认 DispatcherServlet
Bean。
3. 修改配置属性影响自动化配置
很多自动化配置类的行为会受到 配置属性 的影响。 你可以通过 修改 application.properties
或 application.yml
配置文件中的属性值,来间接地影响自动化配置的行为。
示例: 修改内嵌 Tomcat 服务器的端口号
在 application.properties
文件中添加以下配置:
server.port=9090 // 修改 Tomcat 服务器端口号为 9090
通过修改配置属性,你可以灵活地调整自动化配置的细节,以满足项目的个性化需求。
六、 总结: 自动化配置的优势和重要性
Spring Boot 自动化配置 是一个非常强大的特性,它为 Spring Boot 应用带来了诸多优势:
- 大幅简化配置,提升开发效率: 让开发者可以更专注于业务逻辑,而不是繁琐的配置工作。
- 降低配置错误,提高应用稳定性: 自动化配置由官方维护,配置规则经过充分验证,降低了配置错误的风险。
- 统一配置标准,易于维护和理解: 使得不同 Spring Boot 应用的配置风格更加一致,易于维护和理解。
- 按需配置,灵活可扩展: 通过条件注解,实现 “按需配置”,并允许开发者自定义和影响自动化配置的行为。
理解 Spring Boot 的自动化配置机制,对于深入学习和掌握 Spring Boot 框架至关重要。 它可以帮助你更好地理解 Spring Boot 的 “魔法” 所在,并能更高效地构建 Spring Boot 应用。
希望这篇关于 Spring Boot 自动化配置的详细讲解能够帮助你更好地理解这个核心概念! 如果你还有其他 Spring Boot 知识点想深入了解,随时可以告诉我! 😊
相关文章:
Spring Boot 核心知识点深度详解:自动化配置 (Auto-configuration) - 解锁 Spring Boot 的 “魔法”
Spring Boot 核心知识点深度详解:自动化配置 (Auto-configuration) - 解锁 Spring Boot 的 “魔法” ✨ 自动化配置 (Auto-configuration) 是 Spring Boot 最核心的特性之一,也是它能够大幅简化 Spring 应用开发的关键所在。 它让 Spring Boot 应用能够…...
嵌入式Linux | 什么是 BootLoader、Linux 内核(kernel)、和文件系统?
01 什么是 BootLoader 呢? 它是个引导程序,也就是硬件复位以后第一个要执行的程序,它主要工作就是初始化操作系统运行的环境,比如说内存、定时器、缓冲器等,当这个工作做完以后,再把操作系统的代码加载…...
IP关联是什么?怎么避免?
在跨境电商的道路上,大家好!今天想和大家聊一聊一个非常重要的话题,那就是IP关联的问题。在商业活动中,了解如何避免IP关联对保护我们宝贵的商铺至关重要。接下来,我们将深入探讨IP关联的概念、影响及如何有效防止这一…...
【Agent】OpenManus-Prompt组件详细分析
1. 提示词架构概述 OpenManus 的提示词组件采用了模块化设计,为不同类型的智能体提供专门的提示词模板。每个提示词模块通常包含两种核心提示词:系统提示词(System Prompt)和下一步提示词(Next Step Prompt࿰…...
算数操作符、赋值操作符、单目操作符、强制类型转换
一、算术操作符(、 -、 *、 /、 %) • - * / %操作符都是双⽬操作符,有**两个操作数**的符号就叫做双目操作符 10 4| || | 操作数1 操作数2// - % / * 以此类推•操作符也被叫做:运算符 1. 符号、符号 - 和 符号* •…...
华为OD机试 - 九宫格按键输入 - 逻辑分析(Java 2023 B卷 200分)
题目描述 九宫格按键输入,输出显示内容。有英文和数字两个模式,默认是数字模式。数字模式直接输出数字,英文模式连续按同一个按键会依次出现这个按键上的字母。如果输入“/”或其他字符,则循环中断。 输入描述 输入范围为数字0…...
DeepSeek大模型在政务服务领域的应用
DeepSeek大模型作为国产人工智能技术的代表,近年来在政务服务领域的应用呈现多点开花的态势。通过多地实践,该技术不仅显著提升了政务服务的效率与智能化水平,还推动了政府治理模式的创新。以下从技术应用场景、典型案例及发展趋势三个维度进…...
卷积神经网络 - 一维卷积、二维卷积
卷积(Convolution),也叫褶积,是分析数学中一种重要的运算。在信号处理或图像处理中,经常使用一维或二维卷积,本博文我们来学习一维卷积和二维卷积。 理解一维卷积和二维卷积的核心在于把握维度对特征提取方式的影响。我们从数学定…...
【NLP 33、实践 ⑦ 基于Triple Loss作表示型文本匹配】
目录 一、配置文件 config.py 二、 数据加载文件 loader.py 1.加载数据 Ⅰ、加载字表或词表 Ⅱ、加载标签映射表 Ⅲ、封装数据 2.处理数据 Ⅰ、补齐或截断 Ⅱ、定义类的特殊方法 ① 返回数据集大小 ② 生成随机训练样本 ③ 根据索引返回样本 Ⅲ、加载和处理训练样本和测试样本 …...
基于CNN的多种类蝴蝶图像分类
基于CNN的多种类蝴蝶图像分类🦋 基于卷积神经网络对64992786张图像,75种不同类别的蝴蝶进行可视化分析、模型训练及分类展示 导入库 import pandas as pd import os import matplotlib.pyplot as plt import seaborn as sns import numpy as np from …...
Linkreate wordpressAI智能插件-自动生成原创图文、生成关键词、获取百度搜索下拉关键词等
Linkreate wordpressAI插件核心功能亮点 文章生成与优化 自动化文章生成:利用 AI 技术,根据关键词生成高质量文章。 支持指定长度和要求,异步生成不阻塞操作。 且 AI 可自动生成精准的 tag 标签,利于 SEO 优化。 批量生成文章…...
uniapp-x web 开发警告提示以及解决方法
defineModel props...
详细介绍 SetWindowPos() 函数
书籍:《Visual C 2017从入门到精通》的2.3.8 Win32控件编程 环境:visual studio 2022 内容:【例2.29】模态对话框 说明:以下内容大部分来自腾讯元宝。 1. 函数功能与用途 SetWindowPos() 是 Windows API 中用于动态调整窗口…...
SpringBoot桂林旅游景点导游平台开发与设计
一个基于SpringBoot开发的桂林旅游景点导游平台项目。该项目不仅功能全面,而且易于部署,适合初学者学习和进阶开发者参考。 项目概述 该项目旨在为用户提供一个便捷的桂林旅游景点信息查询与线路推荐平台。系统分为管理员模块和用户模块,分…...
深入理解传输层协议
各类资料学习下载合集 https://pan.quark.cn/s/8c91ccb5a474 传输层是计算机网络中的一个重要层次,其主要任务是为应用层提供可靠的数据传输服务。传输层的协议主要包括 TCP(传输控制协议)和 UDP(用户数据报协议)。本文将详细解析这两种协议的特点、使用…...
基于金融产品深度学习推荐算法详解【附源码】
深度学习算法说明 1、简介 神经网络协同过滤模型(NCF) 为了解决启发式推荐算法的问题,基于神经网络的协同过滤算法诞生了,神经网络的协同过滤算法可以 通过将用户和物品的特征向量作为输入,来预测用户对新物品的评分,从而解决…...
java 中散列表(Hash Table)和散列集(Hash Set)是基于哈希算法实现的两种不同的数据结构
在 Java 中,散列表(Hash Table)和散列集(Hash Set)是两种不同的数据结构,但它们都基于哈希表的原理来实现。下面是它们的联系与区别、实现类以及各自的优缺点,并用表格进行对比整理。 联系与区…...
Tauri + Vite + SvelteKit + TailwindCSS + DaisyUI 跨平台开发详细配置指南(Windows)
Tauri Vite SvelteKit TailwindCSS DaisyUI 跨平台开发详细配置指南(Windows) 本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议。转载请注明出处及本声明 原文链接:[你的文章链接] 🛠️ 环境准备 1. 安装核心工具…...
centos 7误删/bash 拯救方法
进入救援模式 1. 插入CentOS 7安装光盘,重启系统。在开机时按BIOS设置对应的按键(通常是F2等),将启动顺序调整为CD - ROM优先。 2. 系统从光盘启动后,选择“Troubleshooting”,然后选择“Rescue a Cent…...
协程池是调用端并发请求的缓释胶囊
hello, 我是马甲哥,这是我的第183篇原创文章,阅读时间3min,有用指数4颗星。 昨天"朝花夕拾"栏目倒腾了一款具有请求排队功能的并发受限服务器。 演示了互联网高并发请求,服务端遇到的现实情况(服务器高负载、…...
【渗透测试】webpack对于渗透测试的意义
作者 :Yuppie001 作者主页 : 传送 本文专栏 :Web漏洞篇 🌟🌟🌟🌟🌟🌟🌟🌟 webpack: 一.webpack是什么二.对于渗透测试的意义&#…...
举例说明 牛顿法 Hessian 矩阵
矩阵求逆的方法及示例 目录 矩阵求逆的方法及示例1. 伴随矩阵法2. 初等行变换法矩阵逆的实际意义1. 求解线性方程组2. 线性变换的逆操作3. 数据分析和机器学习4. 优化问题牛顿法原理解释举例说明 牛顿法 Hessian 矩阵1. 伴随矩阵法 原理:对于一个 n n n 阶方阵 A A...
VSTO(C#)Excel开发12:多线程的诡异
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...
MambaVision:一种Mamba-Transformer混合视觉骨干网络
摘要 我们提出了一种新型混合Mamba-Transformer主干网络,称为MambaVision,该网络专为视觉应用而设计。我们的核心贡献包括重新设计Mamba公式,以增强其对视觉特征的高效建模能力。此外,我们还对将视觉Transformer(ViT&…...
目标跟踪之DeepSort算法(4)
目标跟踪之DeepSort 1 安装1.1 代码下载与安装1. 2 DeepSort检测流程1.3 模型初始化流程 2. 模型推理2.1 模型推理代码解析2.2 对预测结果跟踪代码解析2.3 轨迹预测2.4 轨迹跟踪2.5 轨迹与特征匹配2.6 计算轨迹与检测的特征余弦距离2.7 用轨迹与检测的马氏距离跟新cost_matrix矩…...
速通大厂测开
最近26届暑期实习招聘和25届春招已经开始,测开学习圈也有同学拿到offer了 今天分享一位25届秋招圈友快速拿到大厂测开offer的经历,希望对大家有所帮助 我是某211本科生,在去年暑假准备考研的间隙意外收获了某大厂测开实习offer,…...
LightRAG简要概述
文章目录 索引流程问答流程naivelocalglobalhybridmix 中文prompt 官方仓库:LightRAG 没有废话,直接进入主题。 索引流程 1、提取实体与关系 2、LLM判断是否有漏掉的实体与关系,如有则接着提取 3、合并实体,根据多个实体描述&a…...
【Mac】安装 Parallels Desktop、Windows、Rocky Linux
一、安装PD 理论上,PD只支持试用15天!当然,你懂的。 第一步,在 Parallels Desktop for Mac 官网 下载 Install Parallels Desktop.dmg第二步,双击 Install Parallels Desktop.dmg 第三步,双击安装Paralle…...
Unity利用噪声生成动态地形
引言 在游戏开发中,地形是构建游戏世界的基础元素之一。传统的地形创建方法通常依赖于手动建模或预设资源,这种方式虽然精确但缺乏灵活性,且工作量巨大。而使用噪声算法生成地形则提供了一种程序化、动态且高效的解决方案。本文将详细介绍如…...
【Linux】Ext系列文件系统(上)
目录 一、 理解硬件 1-1 磁盘 1-2 磁盘物理结构 1-3 磁盘的存储结构 1-4 如何定位一个扇区 1-4 磁盘的逻辑结构 1-4-1 理解过程 1-4-2 真实过程 1-5 CHS && LBA地址 二、文件系统 2-1 "块"概念 2-2 "分区"概念 2-3 "inode"…...
解决diffusers加载stablediffusion模型,输入prompt总是报错token数超出clip最大长度限制
1. StableDiffusion1.5 在加载huggingface中的扩散模型时,输入prompt总是会被报错超过clip的最大长度限制。 解决方案:使用compel库 from diffusers import AutoPipelineForText2Image import torch import pdb from compel import Compeldevice torc…...
metersphere接口测试(1)使用MeterSphere进行接口测试
文章目录 前言接口文档单接口测试环境配置梳理接口测试场景测试接口 接口自动化怎么写复用性高的自动化测试用例 总结 前言 大汉堡工作第203天,本篇记录我第一次接触接口测试任务,最近有些懈怠啊~ 接口文档 首先就是接口地址,接口测试时用…...
Android第三次面试总结(网络篇)
在计算机网络领域,网络模型是理解通信原理的基础框架。本文将详细解析 OSI 参考模型和 TCP/IP 模型的分层结构、核心功能及实际应用,并通过对比帮助读者建立完整的知识体系。 一、OSI 参考模型:七层架构的理论基石 OSI(开放系统…...
AirtestIDE用法
包括airtest和poco 1. airtest 安装python3.7.9 64 python3 -m pip install -U airtest 或者: git clone https://github.com/AirtestProject/Airtest.git pip install -e airtest 无界面的airtest用法: 打开手机中的 开发者选项 , 以及 允许USB调…...
【面试手撕】非常规算法,多线程常见手撕题目
【面试手撕】非常规算法,多线程常见手撕题目 生产者消费者ReentrantLock实现的生产苹果/消费苹果synchronized实现的生产消费LinkedBlockingQueue阻塞队列方法实现多条件资源分配分布式任务调度模拟 交替打印两个线程交替打印1-100之间的数ReentrantLock 实现synchr…...
MySQL复合查询
目录 多表查询 自连接 子查询 单行子查询 多行子查询 in关键字 all关键字 any关键字 多列子查询 from中使用子查询 合并查询 union 操作符 union all 操作符 内外连接 内连接 外连接 左外连接 右外连接 前几期我们已经学习了MySQL的基本查询&…...
登录Xshell主机及Linux基本指令
✅博客主页:爆打维c-CSDN博客 🐾 🔹分享c、c知识及代码 🐾 🔹Gitee代码仓库 五彩斑斓黑1 (colorful-black-1) - Gitee.com 一、操作系统简介 Linux其实跟我们熟知的Window一样,它们都是操作系统。 &#x…...
[LevelDB]关于LevelDB存储架构到底怎么设计的?
本文内容组织形式 LevelDB 存储架构重要特点总体概括LevelDB中内存模型MemTableMemTable的数据结构背景:SkipListSkiplist的数据结构 Skiplist的数据访问细节 SkipList的核心方法Node细节源代码 MemTable的数据加速方式Iterator 的核心方法 MemTable 的读取&写入…...
深入解析 React Diff 算法:原理、优化与实践
深入解析 React Diff 算法:原理、优化与实践 1. 引言 React 作为前端领域的标杆框架,采用 虚拟 DOM(Virtual DOM) 来提升 UI 更新性能。React 的 Diff 算法(Reconciliation) 是虚拟 DOM 运行机制的核心&a…...
【从零开始】Air780EPM的LuatOS二次开发——OneWire协议调试注意事项!
当涉及到与传感器、执行器等外部设备交互时,OneWire协议的高效调试成为决定项目成败的关键环节。OneWire协议(单总线协议)以其仅需一根数据线即可实现设备通信的极简特性,被广泛应用于温度传感器、身份识别模块等场景。 一、LuatO…...
响应(Response)
在 Flask 中,视图函数可以返回多种类型的响应,例如字符串、HTML、JSON、文件等。Flask 提供了 make_response 函数,用于生成和自定义 HTTP 响应。 2.1 默认响应 默认情况下,视图函数返回的字符串会被 Flask 包装成一个 HTTP 响应…...
C++学习之云盘项目fastDFS
1.资料介绍 1.1 一些概念 1. 什么是服务器 硬件 : 一台配置高的电脑 软件 : 电脑必须有一个能够解析 http 协议的软件 2. 常见的 Web 服务器 tomcat 服务器 apache 组织产品 , 开源的免费服务器 weblogic 服务器 bea 公司 , 收费的服务器 不交费 , 访问量受限…...
使用vue3+el-form实现动态新增名称,值,并对名称进行必填校验
使用vue3el-form实现动态新增名称,值,并对名称进行必填校验 效果图 代码 <template><el-form :model"form" :rules"rules" ref"dynamicForm"><!-- 动态添加的名称和值 --><el-row v-for"(ite…...
Spring Boot 集成高德地图电子围栏
摘要:本文手把手教你通过 Spring Boot 调用高德地图 API 实现电子围栏功能,涵盖云端围栏创建、设备位置监控与本地算法校验,附带完整代码和避坑经验! 一、电子围栏核心原理 1.1 什么是电子围栏? 虚拟地理边界&#x…...
3.JVM-内部结构
栈结构 动态链接 栈中的对象指向堆中的实际引用 符号引用: 比如一个类的名称 直接引用: 具体堆中数据信息 方法返回 栈中上一层的结果和下一层的指令 操作数栈 局部变量 该线程中需要的变量 PC计数器 程序计数器:存当前执行到那一步 操作数栈里面将计算完之后的结果推入局…...
Spring 框架中常用注解和使用方法
Spring 框架中常用注解的详细解释与应用场景,结合核心功能和实际开发需求进行分类说明: 1.组件定义注解 1.1 Component 作用:通用注解,将普通 Java 类标记为 Spring 管理的 Bean,由容器实例化和管理,相当…...
神策数据接入 DeepSeek,AI 赋能数据分析与智能运营
在 AI 技术迅猛发展的浪潮下,神策数据正在加速推进人工智能在数据分析和智能运营领域的深度应用。近日,神策数据宣布全面接入 DeepSeek,为企业客户带来更加智能化、高效的数据分析与智能运营服务。这一举措展现了神策数据在人工智能方向的探索…...
微软OneNote无法同步解决方案
目录 前言原因UWP特性 解决方案C***h注册表 参考链接 前言 假设有多台Windows电脑,最方便且免费的多设备笔记同步方案就是微软自家的OneNote,使用OneDrive自带的5G云存储。 但是在国内大陆的OneNote,经常会出现无法同步、同步失败࿱…...
一般机器学习有哪些算法?
传统的机器学习算法主要依赖统计学和优化方法,不依赖深层神经网络,通常具有较高的可解释性且适用于中小规模数据集。以下是经典的传统机器学习算法分类及代表性模型: 一、监督学习(Supervised Learning) 1. 回归&…...
RAGFlow部署与使用(开源本地知识库管理系统,包括kibana配置)
一、RAGFlow 简介 戳我访问RAGFlow RAGFlow 是一款基于深度文档理解构建的开源 RAG(Retrieval-Augmented Generation)引擎。它可以给我们搭建本地知识库,将用户的知识文档上传到RAGFlow后,通过文档切分、向量入库,在…...