当前位置: 首页 > news >正文

Spring Boot 核心注解全解:@SpringBootApplication背后的三剑客

大家好呀!👋 今天我们要聊一个超级重要的Spring Boot话题 - 那个神奇的主类注解@SpringBootApplication!很多小伙伴可能每天都在用Spring Boot开发项目,但你真的了解这个注解背后的秘密吗?🤔

别担心,今天我就用最通俗易懂的方式,带大家彻底搞懂这个"三合一"的超级注解!保证连小学生都能听懂!🎯 文章会很长很详细,但绝对值得你花时间看完!💪

一、先来认识下主角:@SpringBootApplication

每次我们创建一个Spring Boot项目,都会在主类上看到这个注解:

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

看起来很简单对吧?但你知道吗,这个注解其实是个"三合一"的超级注解!🦸‍♂️ 它由三个核心注解组合而成:

  1. @SpringBootConfiguration - 配置担当
  2. @EnableAutoConfiguration - 自动装配担当
  3. @ComponentScan - 组件扫描担当

接下来我们就一个个拆解,看看它们各自有什么本领!🔍

二、第一剑客:@SpringBootConfiguration

1. 基本介绍

@SpringBootConfiguration是Spring Boot特有的配置注解,它实际上是@Configuration注解的"加强版"💪。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {@AliasFor(annotation = Configuration.class)boolean proxyBeanMethods() default true;
}

从代码可以看出,它本质上就是一个@Configuration,但加上了Spring Boot的特殊标识。

2. 它能做什么?

  • 标识配置类:告诉Spring"这是一个配置类,里面有Bean的定义哦!"📝
  • 定义Bean:可以在类里用@Bean注解定义各种组件
  • 替代XML配置:以前用XML配置的Bean,现在可以用Java代码来配置了

3. 实际使用示例

@SpringBootConfiguration
public class MyConfig {@Beanpublic MyService myService() {return new MyServiceImpl();}@Beanpublic DataSource dataSource() {// 配置数据源return new HikariDataSource();}
}

4. 与@Configuration的区别

虽然功能相同,但@SpringBootConfiguration有特殊含义:

  • 它通常只用于主配置类(就是有main方法的那个类)
  • Spring Boot在内部处理时会特殊对待它
  • 一般项目中建议还是用@Configuration,除非是主类

5. 小测验

❓ 问题:如果一个类被@SpringBootConfiguration标注,Spring会怎么处理它?
💡 答案:Spring会把它当作配置类处理,扫描其中的@Bean方法,并将返回的对象注册为Spring容器中的Bean。

三、第二剑客:@EnableAutoConfiguration

这是三个剑客中最强大也最神奇的一个!✨ 它开启了Spring Boot的"自动装配"魔法!

1. 自动装配是什么?

想象你去吃自助餐🍽️:

  • 传统Spring:你需要自己点每道菜(手动配置每个Bean)
  • Spring Boot:看到你走进来,就自动把你可能喜欢的菜都端上来了(自动配置)

这就是自动装配的魅力!它根据你添加的依赖,自动配置Spring应用。

2. 工作原理揭秘

@EnableAutoConfiguration背后的魔法是这样实现的:

  1. 读取META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件:这个文件里列出了所有自动配置类
  2. 条件过滤:根据当前环境(类路径、已有Bean等)过滤掉不适用的配置
  3. 应用配置:将符合条件的配置类加载进来

3. 自动配置示例

举个例子🌰:

  • 你在pom.xml中添加了spring-boot-starter-data-jpa
  • Spring Boot看到后:“哦!你需要JPA支持!”
  • 自动配置数据源、EntityManager等JPA相关Bean

4. 查看自动配置报告

想知道哪些自动配置生效了?可以这样查看:

在application.properties中添加:

debug=true

启动时会打印类似这样的报告:

=========================
AUTO-CONFIGURATION REPORT
=========================Positive matches:
-----------------DataSourceAutoConfiguration matched:- @ConditionalOnClass found org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType (OnClassCondition)Negative matches:
-----------------ActiveMQAutoConfiguration:Did not match:- @ConditionalOnClass did not find required class 'javax.jms.ConnectionFactory' (OnClassCondition)

5. 自定义自动配置

你也可以创建自己的自动配置!步骤:

  1. 创建META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件
  2. 写入你的配置类全限定名
  3. 使用@Conditional系列注解控制条件

6. 排除自动配置

如果不想要某些自动配置,可以排除它们:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class MyApplication {// ...
}

或者在配置文件中:

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

7. 小测验

❓ 问题:为什么我们加了spring-boot-starter-web依赖后,Tomcat就自动启动了?
💡 答案:因为@EnableAutoConfiguration检测到类路径下有Servlet相关的类,自动加载了Tomcat的配置。

四、第三剑客:@ComponentScan

1. 组件扫描是什么?

@ComponentScan就像Spring的"雷达"📡,它会扫描指定包及其子包下的组件(被@Component@Service@Repository等注解的类),并把它们注册为Spring Bean。

2. 默认行为

@SpringBootApplication中,如果没有指定扫描路径:

  • 默认扫描主类所在包及其子包
  • 这也是为什么我们通常把主类放在项目最外层包

3. 自定义扫描路径

如果你想扫描其他包,可以这样:

@SpringBootApplication
@ComponentScan({"com.myapp", "com.shared"})
public class MyApplication {// ...
}

4. 过滤组件

你可以包含或排除特定组件:

@ComponentScan(basePackages = "com.myapp",excludeFilters = @ComponentScan.Filter(type = FilterType.REGEX, pattern = "com.myapp.test.*")
)

5. 与XML配置的对比

以前在XML中是这样配置组件扫描的:


现在用注解更加简洁方便!

6. 实际应用技巧

  • 组织包结构:合理组织包结构,让扫描更高效
  • 避免全盘扫描:不要扫描不必要的包(如第三方jar包)
  • 多模块项目:在多模块项目中,注意主类的位置

7. 小测验

❓ 问题:如果把主类放在com.myapp包,但你的Service类在com.service包,会发生什么?
💡 答案:Service类不会被自动扫描到,需要手动添加@ComponentScan("com.service")或者把Service移到com.myapp或其子包下。

五、三剑客如何协同工作

现在我们已经认识了三位剑客,来看看它们是如何配合的:🤝

  1. 启动阶段:SpringApplication.run()启动时
  2. @SpringBootConfiguration:先识别这是一个配置类
  3. @ComponentScan:扫描组件,注册Bean定义
  4. @EnableAutoConfiguration:根据条件自动配置
  5. Bean实例化:所有Bean定义就绪后,实例化Bean

它们的执行顺序非常重要!组件扫描要先于自动配置,这样自动配置才能基于已有Bean进行条件判断。

六、深入理解:@SpringBootApplication源码解析

让我们看看这个注解的庐山真面目:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) 
})
public @interface SpringBootApplication {// 可以指定排除的自动配置类@AliasFor(annotation = EnableAutoConfiguration.class)Class[] exclude() default {};// 可以指定排除的自动配置类名@AliasFor(annotation = EnableAutoConfiguration.class)String[] excludeName() default {};// 可以自定义扫描包@AliasFor(annotation = ComponentScan.class, attribute = "basePackages")String[] scanBasePackages() default {};// 可以自定义扫描类@AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")Class[] scanBasePackageClasses() default {};
}

可以看到,它主要是组合了三个注解,并提供了一些便捷的属性来配置它们。

七、实际开发中的最佳实践

1. 主类位置

✅ 正确做法:放在项目最顶层包

com
└── myapp├── Application.java  ← 主类在这里├── controller├── service└── repository

❌ 错误做法:放在深层包中

com
└── myapp├── config│   └── Application.java  ← 主类放太深了!├── controller├── service└── repository

2. 多模块项目配置

对于多模块项目,可以这样组织:

// 主模块中的主类
@SpringBootApplication
@ComponentScan({"com.myapp.module1","com.myapp.module2","com.myapp.shared"
})
public class MyApplication {// ...
}

3. 自定义配置技巧

  • 排除特定自动配置:如测试时排除安全配置
  • 精细控制扫描:只扫描必要的包提高性能
  • 组合使用:可以同时使用这三个注解进行更细粒度控制

八、常见问题解答

Q1: 为什么我的自定义配置类不生效?

可能原因:

  1. 没有放在组件扫描的路径下
  2. 类上没有加@Configuration或相关注解
  3. 被其他配置覆盖了

解决方案:

  • 检查包结构
  • 添加@Configuration
  • 使用@Order调整顺序

Q2: 自动配置太魔法了,如何知道发生了什么?

解决方法:

  1. 开启debug模式(debug=true
  2. 查看/actuator/conditions端点(需要actuator依赖)
  3. 阅读官方文档的自动配置部分

Q3: 如何覆盖自动配置的Bean?

很简单,只需要自己定义一个同类型的Bean:

@Bean
public DataSource dataSource() {// 你的自定义数据源return new MyCustomDataSource();
}

Spring Boot会优先使用你的Bean而不是自动配置的。

九、高级话题:自定义@SpringBootApplication

你甚至可以创建自己的"增强版"@SpringBootApplication

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootApplication
@EnableCaching
@EnableAsync
public @interface MyEnhancedSpringBootApplication {// 可以添加自定义属性
}

然后就可以这样使用:

@MyEnhancedSpringBootApplication
public class MyApplication {// ...
}

这样就把缓存和异步支持也默认集成了!

十、总结回顾

今天我们深入剖析了@SpringBootApplication背后的三位剑客:

  1. @SpringBootConfiguration - 标识这是一个配置类
  2. @EnableAutoConfiguration - 开启自动配置魔法
  3. @ComponentScan - 自动扫描组件

记住它们的协作关系:

  • 先识别配置
  • 再扫描组件
  • 最后自动配置

理解这些核心注解的工作原理,能让你更好地掌握Spring Boot,并在遇到问题时快速定位原因!💡

希望这篇长文对你有所帮助!如果有任何问题,欢迎留言讨论~ 😊

Happy Coding! 🚀

推荐阅读文章

  • 由 Spring 静态注入引发的一个线上T0级别事故(真的以后得避坑)

  • 如何理解 HTTP 是无状态的,以及它与 Cookie 和 Session 之间的联系

  • HTTP、HTTPS、Cookie 和 Session 之间的关系

  • 什么是 Cookie?简单介绍与使用方法

  • 什么是 Session?如何应用?

  • 使用 Spring 框架构建 MVC 应用程序:初学者教程

  • 有缺陷的 Java 代码:Java 开发人员最常犯的 10 大错误

  • 如何理解应用 Java 多线程与并发编程?

  • 把握Java泛型的艺术:协变、逆变与不可变性一网打尽

  • Java Spring 中常用的 @PostConstruct 注解使用总结

  • 如何理解线程安全这个概念?

  • 理解 Java 桥接方法

  • Spring 整合嵌入式 Tomcat 容器

  • Tomcat 如何加载 SpringMVC 组件

  • “在什么情况下类需要实现 Serializable,什么情况下又不需要(一)?”

  • “避免序列化灾难:掌握实现 Serializable 的真相!(二)”

  • 如何自定义一个自己的 Spring Boot Starter 组件(从入门到实践)

  • 解密 Redis:如何通过 IO 多路复用征服高并发挑战!

  • 线程 vs 虚拟线程:深入理解及区别

  • 深度解读 JDK 8、JDK 11、JDK 17 和 JDK 21 的区别

  • 10大程序员提升代码优雅度的必杀技,瞬间让你成为团队宠儿!

  • “打破重复代码的魔咒:使用 Function 接口在 Java 8 中实现优雅重构!”

  • Java 中消除 If-else 技巧总结

  • 线程池的核心参数配置(仅供参考)

  • 【人工智能】聊聊Transformer,深度学习的一股清流(13)

  • Java 枚举的几个常用技巧,你可以试着用用

  • 由 Spring 静态注入引发的一个线上T0级别事故(真的以后得避坑)

  • 如何理解 HTTP 是无状态的,以及它与 Cookie 和 Session 之间的联系

  • HTTP、HTTPS、Cookie 和 Session 之间的关系

  • 使用 Spring 框架构建 MVC 应用程序:初学者教程

  • 有缺陷的 Java 代码:Java 开发人员最常犯的 10 大错误

  • Java Spring 中常用的 @PostConstruct 注解使用总结

  • 线程 vs 虚拟线程:深入理解及区别

  • 深度解读 JDK 8、JDK 11、JDK 17 和 JDK 21 的区别

  • 10大程序员提升代码优雅度的必杀技,瞬间让你成为团队宠儿!

  • 探索 Lombok 的 @Builder 和 @SuperBuilder:避坑指南(一)

  • 为什么用了 @Builder 反而报错?深入理解 Lombok 的“暗坑”与解决方案(二)

相关文章:

Spring Boot 核心注解全解:@SpringBootApplication背后的三剑客

大家好呀!👋 今天我们要聊一个超级重要的Spring Boot话题 - 那个神奇的主类注解SpringBootApplication!很多小伙伴可能每天都在用Spring Boot开发项目,但你真的了解这个注解背后的秘密吗?🤔 别担心&#x…...

Android 音频架构全解析:从 AudioTrack 到 AudioFlinger

在开发音视频相关应用时,我们常会接触到 MediaPlayer、SoundPool、AudioTrack、OpenSL ES、AAudio、Oboe 等名词,它们都与 Android 的音频播放息息相关。然而,真正理解它们之间的关系以及背后运行机制,才能写出高性能、低延迟的音…...

【教程】无视硬件限制强制升级Windows 11

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 1、下载升级工具:https://github.com/builtbybel/Flyby11/releases 2、解压后打开软件: 3、拖入win11.iso或者自动下载&#xf…...

ICPR-2025 | 让机器人在未知环境中 “听懂” 指令精准导航!VLTNet:基于视觉语言推理的零样本目标导航

作者:Congcong Wen, Yisiyuan Huang, Hao Huang ,Yanjia Huang, Shuaihang Yuan, YuHao, HuiLin and Yi Fang 单位:纽约大学阿布扎比分校具身人工智能与机器人实验室,纽约大学阿布扎比分校人工智能与机器人中心,纽约大学坦登工程…...

替代升级VMware | 云轴科技ZStack构建山西证券一云多芯云平台

通过云轴科技ZStack Cloud云平台,山西证券打造了敏捷部署、简单运维的云平台,不仅兼容x86、海光、鲲鹏三种异构服务器实现一云多芯,还通过云平台虚拟化纳管模块纳管原有VMware虚拟化资源,并对接第三方集中式存储,在保护…...

Houdini python code:参数指定文件路径

创建null节点并命名为control并增加filedir参数 创建python节点 node hou.pwd() geo node.geometry()node hou.node(/obj/output_tetgen/control) filedir node.parm(filedir).eval() print("filedir:",filedir)得到输出...

ChatGPT-o3辅助学术写作的关键词和引言效果如何?

目录 关键词 引言 论文引言(≈300 字) 大家好这里是AIWritePaper官方账号,官网👉AIWritePaper~ 关键词 摘要是文章的精华,通常在200-250词左右。要包括研究的目的、方法、结果和结论。让AI工具作为某领域内资深的研…...

树莓派5+Vosk+python实现语音识别

简介 Vosk是语音识别开源框架,支持二十种语言 - 中文,英语,印度英语,德语,法语,西班牙语,葡萄牙语,俄语,土耳其语,越南语,意大利语,荷…...

Selenium之 CSS 选择器详细讲解

Selenium之 CSS 选择器详细讲解 引言 在.Selenium.自动化测试中,元素定位是至关重要的一环。而.CSS.选择器作为一种强大且灵活的定位工具,在.Selenium.中得到了广泛的应用。本文将详细介绍.CSS.选择器的基本语法、常用类型以及如何在.Selenium.中高效地…...

【LeetCode】大厂面试算法真题回忆(61)--组装新的数组

题目描述 给你一个整数M和数组N,N中的元素为连续整数,要求根据N中的元素组装成新的数组R,组装规则: R中元素总和加起来等于M。R中的元素可以从N中重复选取。R中的元素最多只能有1个不在N中,且比N中的数字都要小(不能为负数)。请输出:数组R一共有多少组装办法。 输入描…...

基于用户的协同过滤推荐系统实战项目

文章目录 基于用户的协同过滤推荐系统实战项目1. 推荐系统基础理论1.1 协同过滤概述1.2 基于用户的协同过滤原理1.3 相似度计算方法1.3.1 余弦相似度(Cosine Similarity)1.3.2 皮尔逊相关系数(Pearson Correlation)1.3.3 欧几里得距离(Euclidean Distance)1.3.4 调整余弦相似度…...

浅析数据库面试问题

以下是关于数据库的一些常见面试问题: 一、基础问题 什么是数据库? 数据库是按照数据结构来组织、存储和管理数据的仓库。SQL 和 NoSQL 的区别是什么? SQL 是关系型数据库,使用表结构存储数据;NoSQL 是非关系型数据库,支持多种数据模型(如文档型、键值对型等)。什么是…...

【Python3】Django 学习之路

第一章:Django 简介 1.1 什么是 Django? Django 是一个高级的 Python Web 框架,旨在让 Web 开发变得更加快速和简便。它鼓励遵循“不要重复自己”(DRY,Don’t Repeat Yourself)的原则,并提供了…...

Java并发编程高频面试题(已整理Java面试宝典PDF完整版)

为什么要使用并发编程 提升多核CPU利用率:现代计算机通常配备多核CPU,通过创建多个线程,操作系统可以将不同线程分配到不同CPU核心上并行执行,从而充分利用硬件资源。若仅使用单线程,则只能利用一个CPU核心&#xff0c…...

第 4 期:DDPM中的损失函数——为什么只预测噪声?

—— 从变分下界到噪声预测 回顾:我们到底在做什么? 在第 3 期中,我们介绍了扩散模型的逆过程建模。简而言之,目标是通过神经网络学习从噪声 x_t​ 中恢复图像 x_0,并且我们通过预测噪声 ϵ来完成这个任务。 今天&a…...

Docker使用、容器迁移

Docker 简介 Docker 是一个开源的容器化平台,用于打包、部署和运行应用程序及其依赖环境。Docker 容器是轻量级的虚拟化单元,运行在宿主机操作系统上,通过隔离机制(如命名空间和控制组)确保应用运行环境的一致性和可移…...

专业热度低,25西电光电工程学院(考研录取情况)

1、光电工程学院各个方向 2、光电工程学院近三年复试分数线对比 学长、学姐分析 由表可看出: 1、光学工程25年相较于24年下降20分, 2、光电信息与工程(专硕)25年相较于24年上升15分 3、25vs24推免/统招人数对比 学长、学姐分析…...

六、LangChain Agent 最佳实践

1. 架构设计与组件选择 (1) 核心组件分层设计 Model(LLM驱动层) 生产环境推荐:使用 gpt-4-1106-preview 或 Anthropic Claude 3 等高性能模型,结合 model.with_fallbacks() 实现故障转移(如备用模型或本地模型)。本地部署:选择 Llama3-70B 等开源模型,搭配 Docker 或 …...

ubantu18.04(Hadoop3.1.3)之MapReduce编程

说明:本文图片较多,耐心等待加载。(建议用电脑) 注意所有打开的文件都要记得保存。 第一步:准备工作 本文是在之前Hadoop搭建完集群环境后继续进行的,因此需要读者完成我之前教程的所有操作。 第二步&…...

PoCL环境搭建

PoCL环境搭建 **一.关键功能与优势****二.设计目的****三.测试步骤**1.创建容器2.安装依赖3.编译安装pocl4.运行OpenCL测试程序 Portable Computing Language (PoCL) 简介 Portable Computing Language (PoCL) 是一个开源的、符合标准的异构计算框架,旨在为 OpenCL…...

关于hadoop和yarn的问题

1.hadoop的三大结构及各自的作用? HDFS(Hadoop Distributed File System):分布式文件系统,负责海量数据的存储,具有高容错性和高吞吐量。 MapReduce:分布式计算框架,用于并行处理大…...

软件工程中数据一致性的探讨

软件工程中数据一致性的探讨 引言数据一致性:软件工程中的业务正确性与性能的权衡数据一致性为何重要业务正确性:事务的原子性与一致性ACID原则的基石分布式事务的挑战一致性级别:从强一致到最终一致 实践中的一致性权衡金融系统:…...

在服务器上安装redis

1.安装所需插件gcc 查看gcc版本 gcc -v 没有安装的话,安装命令如下 yum -y install gcc 2.安装 下载安装包 https://download.redis.io/releases/ 将安装包上传到/opt/software目录下 解压安装包 cd /opt/software tar -zxvf redis-6.2.6.tar.gz 编译并安装redis到指…...

如何选择适合您的过程控制器?

在现代工业中,过程控制器是确保生产效率、质量和安全性的关键设备。它们可以精准监测温度、湿度等变量,优化制造流程,减少人工干预,从而降低错误率和运营成本。但您是否清楚,哪种过程控制器更适合您的企业?…...

C#/.NET/.NET Core拾遗补漏合集(25年4月更新)

前言 在这个快速发展的技术世界中,时常会有一些重要的知识点、信息或细节被忽略或遗漏。《C#/.NET/.NET Core拾遗补漏》专栏我们将探讨一些可能被忽略或遗漏的重要知识点、信息或细节,以帮助大家更全面地了解这些技术栈的特性和发展方向。 ✍C#/.NET/.N…...

闲来无事,用HTML+CSS+JS打造一个84键机械键盘模拟器

今天闲来无聊,突发奇想要用前端技术模拟一个机械键盘。说干就干,花了点时间搞出来了这么一个有模有样的84键机械键盘模拟器。来看看效果吧! 升级版的模拟器 屏幕录制 2025-04-18 155308 是不是挺像那么回事的?哈哈! 它…...

极狐GitLab 项目导入导出设置介绍?

极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 导入导出设置 (BASIC SELF) 导入和导出相关功能的设置。 配置允许的导入源 在从其他系统导入项目之前,必须为该…...

极狐GitLab 项目 API 的速率限制如何设置?

极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 项目 API 的速率限制 (BASIC SELF) 引入于 15.10 版本,功能标志为rate_limit_for_unauthenticated_projects_api_…...

electron 渲染进程按钮创建新window,报BrowserWindow is not a constructor错误;

在 Electron 中,有主进程和渲染进程 主进程:在Node.js环境中运行—意味着能够使用require模块并使用所有Node.js API 渲染进程:每个electron应用都会为每个打开的BrowserWindow(与每个网页嵌入)生成一个单独的渲染器进…...

【前沿】成像“跨界”测量——扫焦光场成像

01 背景 眼睛是人类认识世界的重要“窗口”,而相机作为眼睛的“延伸”,已经成为生产生活中最常见的工具之一,广泛应用于工业检测、医疗诊断与影音娱乐等领域。传统相机通常以“所见即所得”的方式记录场景,传感器捕捉到的二维图像…...

基于C++(MFC)图形编辑界面工具

MFC 图形编辑界面工具 一、背景 喔,五天的实训终于结束了,学校安排的这次实训课名称叫高级程序设计实训,但在我看来,主要是学习了 Visual C .NET 所提供的 MFC(Microsoft Foundation Class)库所提供的类及其功能函数…...

Linux网络通信核心机制解析与层级架构探秘

作为现代操作系统的神经网络,Linux网络通信系统通过多层协作架构实现高效的数据传输机制。本文将从模块化设计、报文处理路径、核心组件交互等多个维度,解析Linux网络通信系统的实现原理与优化策略,并结合内核源码示例与性能调优实践&#xf…...

Tensorflow实现用接口调用模型训练和停止训练功能

语言:Python 框架:Flask、Tensorflow 功能描述:存在两个接口,一个接口实现开始训练模型的功能,一个接口实现停止训练的功能。 实现:用一个全局变量存储在训练中的模型。 # 存储所有训练任务 training_task…...

HTTP测试智能化升级:动态变量管理实战与效能跃迁

在Web应用、API接口测试等领域,测试场景的动态性和复杂性对测试数据的灵活管理提出了极高要求。传统的静态测试数据难以满足多用户并发、参数化请求及响应内容验证等需求。例如,在电商系统性能测试中,若无法动态生成用户ID、订单号或实时提取…...

PyTorch 浮点数精度全景:从 float16/bfloat16 到 float64 及混合精度实战

PyTorch 在深度学习中提供了多种 IEEE 754 二进制浮点格式的支持,包括半精度(float16)、Brain‑float(bfloat16)、单精度(float32)和双精度(float64),并通过统…...

《软件设计师》复习笔记(14.2)——统一建模语言UML、事务关系图

目录 1. UML概述 2. UML构造块 (1) 事物(Things) (2) 关系(Relationships) 真题示例: 3. UML图分类 (1) 结构图(静态) (2) 行为图(动态) 4. 核心UML图详解 5.…...

基于C++(MFC)的细胞识别程序

基于 mfc 的细胞识别程序 一、图像处理课程设计目标 1.1 课题与技术指标 课题:利用图像处理技术设计细胞识别程序。 技术指标: 实验 VS2019 MFC 开发平台待识别图像为 24bit 的真彩色细胞图像进行处理要求识别出细胞,并且保证准确度情况下…...

【前端HTML生成二维码——MQ】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 前端HTML生成二维码——MQ 前言本文将介绍前端HTML如何更具用户输入的内容生成对应的二维码,附页面代码、实现函数、js脚本。一、自定义显示页面1、效果图二、使用步骤1、引入库2、实现函数3、页面及函数代…...

Spring Boot自动配置原理深度解析:从条件注解到spring.factories

大家好!今天我们来深入探讨Spring Boot最神奇的特性之一——自动配置(Auto-configuration)。这个功能让Spring Boot如此受欢迎,因为它大大简化了我们的开发工作。让我们一起来揭开它的神秘面纱吧!👀 🌟 什么是自动配置…...

【unity实战】Animator启用root motion根运动动画,实现完美的动画动作匹配

文章目录 前言1、动画分类2、如何使用根位移动画? 一、根位移动画的具体使用1、导入人形模型2、导入动画3、配置动画参数4、配置角色Animator动画状态机5、使用代码控制人物前进后退 二、问题分析三、Humanoid动画中的Root Motion机制及相关配置1、Humanoid动画中的…...

(51单片机)LCD显示数据存储(DS1302时钟模块教学)(LCD1602教程)(独立按键教程)(延时函数教程)(I2C总线认识)(AT24C02认识)

目录 演示视频: 源代码 main.c LCD1602.c LCD1602.h AT24C02.c AT24C02.h Key.c Key.h I2C.c I2C.h Delay.c Delay.h 代码解析与教程: Dealy模块 LCD1602模块 Key模块 I2C总线模块 AT24C02模块 /E2PROM模块 main模块 演示视频: &…...

2d深度预测

Depth anything v1 相对深度估计,要用绝对深度估计需要微调 概要: 1 使用大量的未标注图像信息 2 采用优化策略—数据增强工具(作用在未标注图像) 3 进行辅助监督—继承语义分割知识(作用在未标注图像) 数据层面: …...

Android12 ServiceManager::addService源码解读

源码 Status ServiceManager::addService(const std::string& name, const sp<IBinder>& binder, bool allowIsolated, int32_t dumpPriority) {auto ctx mAccess->getCallingContext();// apps cannot add servicesif (multiuser_get_app_id(ctx.uid) >…...

【HDFS入门】HDFS性能调优实战:从基准测试到优化策略

目录 引言 1 HDFS性能评估体系 1.1 性能评估体系架构 1.2 基准测试工具对比 2 TestDFSIO基准测试实战 2.1 TestDFSIO工作原理 2.2 测试执行步骤 2.3 结果分析指标 3 TeraSort基准测试实战 3.1 TeraSort测试流程 3.2 测试执行命令 3.3 关键性能指标 4 HDFS性能调优…...

Linux 内核开发/测试工具对比 Windows 驱动验证工具 (Driver Verifier)

Windows 的 Driver Verifier 是一个用于测试和验证驱动程序的强大工具。在 Linux 内核开发中&#xff0c;虽然没有一个完全等价的单一工具&#xff0c;但有多种工具和框架可以提供类似或更专业的功能。 Linux 内核开发和测试工具 1. KASAN (Kernel Address Sanitizer) 功能&…...

通信算法之269 : OFDM信号的循环自相关特性用于无人机图传信号识别

OFDM信号的循环自相关特性是其循环平稳性的核心体现,如下: [相关仿真代码,联系,提供] 一、循环自相关特性来源 ‌循环前缀引入周期性‌ OFDM符号通过添加循环前缀(CP)形成符号周期结构,导致信号具有循环平稳性‌26。每个符号的CP与尾部数据重复,在时延等于FFT长度(N…...

【无人机】电子速度控制器 (ESC) 驱动电机,常见的电调协议,PWM协议,Oneshot协议,DShot协议

目录 1、ESCs & 电机 #1.1、ESC 协议 --ESC Protocols #1.1.1、PWM协议&#xff0c;需要校准 #1.1.2、One Shot 125协议&#xff0c;速率更快 #1.1.3、DShot &#xff0c;减少延迟&#xff0c;无需校准 #1.1.4、无人机CAN 2、PWM 伺服系统和 ESC&#xff08;电机控…...

LeadeRobot具身智能应用标杆:无人机X柔韧具身智能,空中精准作业游刃有余

当前,具身智能已成为全球科技领域的前沿焦点,更受到国家战略级重视,吸引科技产业巨头抢滩布局。但同时,具身智能的商业化路径、规模化应用场景、技术成本等难题也开始在资本界与产业圈引起广泛讨论。 目前,万勋科技基于Pliabot 柔韧技术已推出多款具身智能柔韧机器人产品,在柔…...

WebSocket:实现实时双向通信的技术

WebSocket是一种网络通信协议&#xff0c;它在单个TCP连接上提供全双工通信。WebSocket协议在2011年被IETF&#xff08;互联网工程任务组&#xff09;标准化为RFC 6455&#xff0c;并由W3C&#xff08;万维网联盟&#xff09;制定了WebSocket API标准&#xff0c;使得客户端&am…...

探索 HumanoidBench:类人机器人学习的新平台

在科技飞速发展的当下&#xff0c;类人机器人逐渐走进我们的视野&#xff0c;它们有着和人类相似的外形&#xff0c;看起来能像人类一样在各种环境里完成复杂任务&#xff0c;潜力巨大。但实际上&#xff0c;让类人机器人真正发挥出实力&#xff0c;还面临着重重挑战。 这篇文…...