Spring IoC容器的设计与实现
Spring整体架构与模块划分
核心容器(Core Container)
- spring-core
- 基础工具类:如资源加载(
Resource
接口)、反射工具(ReflectionUtils
)、类型转换(ConversionService
)。 - 核心接口:
BeanFactory
(IoC容器的基本定义)。
- 基础工具类:如资源加载(
- spring-beans
- Bean的定义与依赖管理:
BeanDefinition
(描述Bean的元数据)、BeanWrapper
(Bean属性操作)。 - Bean的实例化与生命周期管理:
AbstractAutowireCapableBeanFactory
(Bean创建的核心类)。
- Bean的定义与依赖管理:
- spring-context
- 应用上下文:
ApplicationContext
(扩展自BeanFactory
,提供国际化、事件发布、资源加载等高级功能)。 - 核心实现类:
ClassPathXmlApplicationContext
(XML配置的上下文)、AnnotationConfigApplicationContext
(注解驱动的上下文)。
- 应用上下文:
- spring-expression(SpEL):Spring表达式语言,支持在运行时查询和操作对象图,如
@Value("#{systemProperties}")
。
AOP与Instrumentation
- spring-aop:动态代理,基于JDK动态代理或CGLIB生成AOP代理对象,如
AopProxy
(代理对象生成器)、Advisor
(切面逻辑)。 - spring-aspects:集成AspectJ,支持
@AspectJ
注解风格的切面定义。 - spring-instrument:类加载器增强,用于服务器级的类植入(如Tomcat的
InstrumentableClassLoader
)。
数据访问与集成(Data Access/Integration)
- spring-jdbc:JDBC抽象层,
JdbcTemplate
简化数据库操作,避免手动处理连接和异常。 - spring-tx:事务管理,
PlatformTransactionManager
定义事务操作,支持声明式事务(@Transactional
)。 - spring-orm:ORM框架整合,对Hibernate、JPA等的支持,如
HibernateTemplate
。 - spring-oxm:对象-XML映射,支持JAXB、XStream等,用于XML与Java对象的转换。
- spring-jms:消息服务,简化JMS API的使用,如
JmsTemplate
。
Web层
- spring-web:基础Web功能,如HTTP客户端、Servlet监听器、
WebApplicationContext
(Web应用上下文)。 - spring-webmvc:MVC框架,如
DispatcherServlet
(前端控制器)、@Controller
、@RequestMapping
注解驱动开发。 - spring-webflux(Spring 5+):响应式Web支持,基于Reactor库实现非阻塞式编程模型,核心类如
WebHandler
。 - spring-websocket:WebSocket通信,支持实时双向通信,如
WebSocketHandler
。
其他模块
- spring-test:集成测试支持,
@SpringJUnitConfig
加载上下文,MockMvc
模拟HTTP请求。 - spring-messaging:消息协议抽象,支持STOMP、WebSocket子协议,用于构建消息驱动的应用。
- spring-context-support:第三方库集成,如缓存(Ehcache)、邮件(JavaMail)、调度(Quartz)。
- spring-framework-bom:依赖管理,统一管理Spring模块的版本,避免Maven/Gradle依赖冲突。
BeanFactory与ApplicationContext的核心区别
设计目标与定位
-
BeanFactory
- 定位:IoC 容器的基础接口,提供 最底层的容器功能,是 Spring 框架的基石。
- 设计目标:实现 Bean 的 定义、加载、实例化、依赖注入 等核心功能;保持轻量级,关注容器的基础职责,不集成非必要功能。
-
ApplicationContext
- 定位:
BeanFactory
的扩展接口,是 Spring 的 高级容器,面向企业级应用。 - 设计目标:在
BeanFactory
基础上,集成 事件发布、国际化、资源管理、AOP 支持 等企业级功能,提供注解驱动。
- 定位:
功能特性对比
-
BeanFactory 的核心功能
- Bean 的实例化与依赖注入:通过
getBean()
方法获取 Bean 实例;支持构造器注入(Constructor Injection)和 Setter 注入。 - Bean 生命周期管理:支持
init-method
和destroy-method
回调。 - 层级容器(Hierarchical Containers):通过
HierarchicalBeanFactory
接口支持父子容器。
- Bean 的实例化与依赖注入:通过
-
ApplicationContext 的扩展功能
-
**事件发布机制(Event Publishing)**通过
ApplicationEventPublisher
接口发布事件(如ContextRefreshedEvent
)。 -
国际化支持(MessageSource):通过
MessageSource
接口实现多语言资源加载。 -
资源访问抽象(ResourceLoader):支持统一资源定位(如
classpath:
、file:
、http:
前缀)。 -
环境配置(Environment Abstraction):管理 Profiles(
@Profile
)和属性文件(@PropertySource
)。 -
AOP 与事务集成:自动注册
AnnotationAwareAspectJAutoProxyCreator
;声明式事务的自动代理(@Transactional
)。 -
便捷的配置方式:支持 XML、Java 注解(
@Component
、@Configuration
)和 Java Config。 -
public interface ApplicationContext extends EnvironmentCapable, // 环境配置ListableBeanFactory, // 扩展 BeanFactory(支持按类型获取 Bean)HierarchicalBeanFactory, // 层级容器MessageSource, // 国际化ApplicationEventPublisher, // 事件发布ResourcePatternResolver { // 资源加载 }
-
Bean 加载机制
-
BeanFactory:延迟加载(Lazy Initialization),只有在调用
getBean()
时才会实例化 Bean。 -
ApplicationContext:预加载单例 Bean,在容器启动时(
refresh()
方法)完成所有非延迟单例 Bean 的实例化。 -
循环依赖处理:通过 三级缓存 解决循环依赖,但需要开发者手动处理
BeanPostProcessor
的依赖关系。private final Map<String, Object> singletonObjects = ...; // 一级缓存(完整 Bean) private final Map<String, Object> earlySingletonObjects = ...; // 二级缓存(早期引用) private final Map<String, ObjectFactory<?>> singletonFactories = ...; // 三级缓存(工厂对象)
核心区别
对比项 | BeanFactory | ApplicationContext |
---|---|---|
功能定位 | 基础容器,仅提供 IoC/DI 核心功能 | 高级容器,集成企业级扩展功能 |
Bean 加载 | 延迟加载(按需实例化) | 预加载单例 Bean(启动时完成) |
扩展能力 | 无事件、国际化、AOP 等支持 | 支持事件、国际化、资源抽象、AOP 等 |
配置方式 | 仅支持 XML | 支持 XML、注解、Java Config |
实际使用 | 极少直接使用 | Spring 应用的标准容器 |
资源定位与Resource体系
Resource接口与实现类
ClassPathResource
:类路径下的资源FileSystemResource
:文件系统资源UrlResource
: URL资源(HTTP、FTP等)ServletContextResource
:Web应用上下文资源ByteArrayResource
:内存字节数组资源
public interface Resource extends InputStreamSource {boolean exists(); // 资源是否存在boolean isReadable(); // 资源是否可读boolean isOpen(); // 资源是否为流形式(如网络资源)URL getURL() throws IOException;File getFile() throws IOException;String getDescription(); // 资源描述(如文件路径)
}
资源定位的核心接口
- ResourceLoader:根据路径字符串(如
classpath:app.xml
)返回对应的Resource
对象。 - ResourcePatternResolver:支持通配符(如
classpath*:config/*.xml
)匹配多个资源。 - ApplicationContext与资源加载:所有
ApplicationContext
均实现了ResourceLoader
接口,可直接调用getResource()
方法。
资源定位流程(以XML配置为例)
- 构造方法传入配置文件路径:
new ClassPathXmlApplicationContext("classpath:application.xml")
- 解析路径为Resource数组:使用
PathMatchingResourcePatternResolver
解析路径,生成Resource[]
- 加载并读取资源:
XmlBeanDefinitionReader
读取Resource
中的XML配置;解析Bean定义并注册到BeanFactory
。
BeanDefinition的加载与解析(XML、注解)
BeanDefinition的核心属性
- Bean的类名(
beanClassName
) - 作用域(
scope
,如singleton
、prototype
) - 是否延迟加载(
lazyInit
) - 初始化/销毁方法(
initMethodName
、destroyMethodName
) - 依赖关系(通过构造函数参数或属性注入)
- 工厂方法(
factoryMethodName
,用于静态工厂或实例工厂创建Bean)
XML配置的加载与解析流程
-
资源定位与读取
- 入口类:
XmlBeanDefinitionReader
(负责读取XML文件并解析为BeanDefinition)。 - 资源定位:通过
ResourceLoader
(如ClassPathResource
)加载XML文件。 - 文档解析:使用
DocumentLoader
将XML文件解析为Document
对象(基于DOM或SAX)。 - BeanDefinition解析:遍历Document中的元素(如
<bean>
标签),生成BeanDefinition。
- 入口类:
-
XML解析的核心类
- DefaultBeanDefinitionDocumentReader:遍历XML文档中的根元素(
<beans>
)及其子元素(<bean>
等)。 - BeanDefinitionParserDelegate:具体解析每个
<bean>
标签,处理属性(如id
、class
、scope
)和子元素。
- DefaultBeanDefinitionDocumentReader:遍历XML文档中的根元素(
注解配置的加载与解析流程
- 组件扫描与注解处理器
- 入口类:
ClassPathBeanDefinitionScanner
(负责扫描类路径下的注解类)。 - 核心注解:
@Component
(及其派生注解@Service
等)、@Configuration
、@Bean
、@Autowired
、@Value
- 入口类:
- 组件扫描流程
- 配置扫描路径:通过
@ComponentScan(basePackages = "com.example")
指定包路径。 - 类路径扫描:使用
ClassPathScanningCandidateComponentProvider
筛选候选类。 - 生成BeanDefinition:对带有
@Component
的类生成ScannedGenericBeanDefinition
。
- 配置扫描路径:通过
- 注解解析的核心类
- AnnotatedBeanDefinitionReader:处理
@Configuration
类中的@Bean
方法,将其转换为ConfigurationClassBeanDefinition
。 - AutowiredAnnotationBeanPostProcessor:处理
@Autowired
和@Value
注解,实现依赖注入。
- AnnotatedBeanDefinitionReader:处理
Bean的实例化过程:构造函数、工厂方法
Bean实例化整体流程
- 实例化(Instantiation):创建Bean的原始对象(通过构造函数或工厂方法)。
- 属性填充(Population):依赖注入(DI)及设置属性值。
- 初始化(Initialization):调用初始化方法(如
init-method
)及应用后置处理器。 - 销毁(Destruction)(可选):容器关闭时调用销毁方法。
实例化阶段(Instantiation)
-
目标:根据Bean定义创建Bean的原始对象。
-
默认构造函数:无参构造函数(最常见方式)。
-
静态工厂方法:通过
factory-method
指定静态方法。 -
实例工厂方法:通过
factory-bean
和factory-method
指定实例方法。 -
三级缓存机制:
-
一级缓存(singletonObjects):存放完全初始化的单例Bean。
-
二级缓存(earlySingletonObjects):存放早期暴露的Bean(未完成属性填充)。
-
三级缓存(singletonFactories):存放Bean的工厂对象,用于生成早期引用。
-
属性填充(Population)
-
目标:为Bean注入依赖的属性和值。
-
Setter注入:通过
<property>
标签或@Autowired
注解。 -
构造器注入:通过
<constructor-arg>
标签或构造函数参数上的@Autowired
。 -
自动装配(Autowiring)
-
按类型(byType):根据类型匹配候选Bean。
-
按名称(byName):根据属性名匹配Bean名称。
-
注解驱动:通过
@Autowired
、@Resource
或@Inject
实现。
-
初始化阶段(Initialization)
- 目标:执行初始化逻辑,使Bean达到可用状态。
- Aware接口回调:调用
BeanNameAware.setBeanName()
、BeanFactoryAware.setBeanFactory()
等。 - BeanPostProcessor前置处理:调用
postProcessBeforeInitialization()
(如@PostConstruct
处理)。 - 自定义初始化方法:调用
InitializingBean.afterPropertiesSet()
或XML中配置的init-method
。 - BeanPostProcessor后置处理:调用
postProcessAfterInitialization()
(如AOP代理的生成)。 - AOP代理生成:
postProcessAfterInitialization()
阶段,AbstractAutoProxyCreator
会为需要代理的Bean生成动态代理对象
销毁阶段(Destruction)
- 目标:容器关闭时释放资源。
- 实现DisposableBean接口:重写
destroy()
方法。 - XML配置
destroy-method
:指定自定义销毁方法。 - 注解
@PreDestroy
:标记销毁前执行的方法。
相关文章:
Spring IoC容器的设计与实现
Spring整体架构与模块划分 核心容器(Core Container) spring-core 基础工具类:如资源加载(Resource接口)、反射工具(ReflectionUtils)、类型转换(ConversionService)。…...
使用vue的插值表达式渲染变量,格式均正确,但无法渲染
如图,作者遇到的问题为,输入以下代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…...
数据库 AI 助手测评:Chat2DB、SQLFlow 等工具如何提升开发效率?
一、引言:数据库开发的 “效率革命” 正在发生 在某互联网金融公司的凌晨故障现场,资深 DBA 正满头大汗地排查一条执行超时的 SQL—— 该语句涉及 7 张核心业务表的复杂关联,因索引缺失导致全表扫描,最终引发交易系统阻塞。这类场景在传统数据库开发中屡见不鲜:据 Gartne…...
21.1Linux中的LCD驱动实验(知识)_csdn
1、LCD 和 LTDC 简介 1.1、LCD 简介 1.1.1、分辨率 1.1.2、像素格式 可以看到红、绿、蓝每个8位,还有一位是A7~A0就是透明通道,32位ARG8888。 1.1.3、LCD 屏幕接口 1.1.4、LCD 时间参数 如果将 LCD 显示一帧图像的过程想象成绘画,那么…...
Angular教程前言:历史、安装与用途
Angular 是一个强大且流行的开源前端 Web 应用程序框架,由 Google 开发并维护 1。它在现代 Web 开发中占据着重要的地位,尤其在构建动态、高效且可扩展的 Web 应用程序方面表现出色,特别适用于单页应用程序 (SPA) 和复杂的用户界面 1。本教程…...
node.js模块化步骤(各标准区别)CommonJS规范、AMD规范、UMD规范、ES Modules (ESM)
前后端建议统一使用ESM 文章目录 Node.js模块化发展历程与标准对比一、模块化的意义1.1 解决的核心问题1.2 没有模块化的问题 二、CommonJS规范2.1 核心特征2.2 实现示例 三、AMD (Asynchronous Module Definition)3.1 特点3.2 代码示例 四、UMD (Universal Module Definition)…...
Unity图片导入设置
🏆 个人愚见,没事写写笔记 🏆《博客内容》:Unity3D开发内容 🏆🎉欢迎 👍点赞✍评论⭐收藏 🔎Unity支持的图片格式 ☀️BMP:是Windows操作系统的标准图像文件格式,特点是…...
MySQL与分布式架构的碰撞
目录 一、分布式架构的核心挑战与MySQL的应对策略 1.1 高并发与扩展性 1.3 高可用与容灾 二、MySQL分布式架构的核心技术实现 2.1 读写分离与主从复制(扩展) 2.2 数据分片与分布式存储(扩展) 2.3 MySQL Cluster与NDB引擎&am…...
python-MySQL鏈接
python鏈接MySQL,主要利用庫 pip install mysql-connector-pythonimport mysql.connector# 配置连接参数 config {"user": "your_username","password": "your_password","host": "localhost", # 或…...
cv::remap() 和 cv::undistortion() 的区别
在 OpenCV 中,cv::remap 和 cv::undistort 都用于处理图像畸变校正,但它们的实现方式和应用场景有显著区别。以下是详细对比: 1. cv::undistort:直接畸变校正 功能 输入:原始畸变图像 相机内参矩阵 (cameraMatrix) …...
【AI提示词】决策树专家
提示说明 一位熟悉决策树算法的机器学习专家,擅长用树状图量化不同选择的结果概率。 提示词 # Role: 决策树专家## Profile - language: 中文 - description: 一位熟悉决策树算法的机器学习专家,擅长用树状图量化不同选择的结果概率 - background: 决…...
【中间件】bthread_数据结构_学习笔记
bthread数据结构 bthread_数据结构_学习笔记1 pthread_cond_t1.1 definition1.2 解释1.3 设计动机1.4 使用示例1.5 注意事项1.6 进一步延伸:pthread_cond_s 2 pthread_mutex_t bthread_数据结构_学习笔记 1 pthread_cond_t POSIX线程库 /usr/include/x86_64-linux…...
VM虚拟机安装CentOS7.9
目录 1.下载CentOS7.9 2.VM虚拟机选择自定义,然后一直傻瓜式下一步 3.选择编辑虚拟机设置,然后选择刚刚下载的ISO 4.输入 ip addr 获取ip地址 5.用Xshell连接 1.下载CentOS7.9 链接:https://pan.baidu.com/s/1kW2gGWnbcjNtq4kz46LKVw?p…...
C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 18)
🎁个人主页:工藤新一 🔍系列专栏:C面向对象(类和对象篇) 🌟心中的天空之城,终会照亮我前方的路 🎉欢迎大家点赞👍评论📝收藏⭐文章 文章目录 二…...
Cribl 数据脱敏 更多方法 MASK (三)
我做过好几个cribl 数据脱敏的实验: Cribl 脱敏mask-CSDN博客...
【笔记】深度学习模型训练的 GPU 内存优化之旅⑤:内存分配篇
开设此专题,目的一是梳理文献,目的二是分享知识。因为笔者读研期间的研究方向是单卡上的显存优化,所以最初思考的专题名称是“显存突围:深度学习模型训练的 GPU 内存优化之旅”,英文缩写是 “MLSys_GPU_Memory_Opt”。…...
【5G 架构】边缘计算平台是如何与3GPP网络连接的?
博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G技术研究。 博客内容主要围绕…...
5.0.0 GripSpliter的使用(探讨水平竖直对齐参数)
布局控件Grid 配合 GridSplitter 无需编写任何代码 就能实现网格大小可拖动。 其HorizontalAlignment、VerticalAlignment属性的使用非常具有迷惑性;本文做了一些一些实验,总结为把这两个属性均设置为strech即可。 总结如下:经过实验,发现以下情况可以正常工作。 水平方向…...
python如何把pdf转word
在Python中将PDF转换为Word文档(.docx)比反向转换(Word转PDF)更具挑战性,因为PDF是固定格式,而Word是可编辑格式。以下是几种可行的方法及详细步骤: 方法1:使用 pdf2docx 库 pdf2do…...
go实现双向链表
需求 实现双向链表的节点生成、正反向遍历、指定删除。 实现 package mainimport ("fmt" )type zodiac_sign struct {number intdizhi stringanimal stringyear intprevious *zodiac_signnext *zodiac_sign }// 添加 // func add_node_by_order(pr…...
33、VS中提示“以下文件中的行尾不一致。是否将行尾标准化?“是什么意思?
在Visual Studio(VS)中遇到提示“以下文件中的行尾不一致。是否将行尾标准化?”时,意味着当前打开或正在编辑的文件内部存在行尾符(EOL,End-Of-Line)格式不统一的情况。以下是详细解释和应对建议…...
C 语言 第五章 指针(5)
目录 函数参数传递机制:地址传递 值传递 简单变量指针作为形参 举例1: 举例2: 举例3: 数组作为形参 举例: 函数参数传递机制:地址传递 值传递 void test(int a, int b) { a 10; b 20; print…...
Python项目源码69:Excel数据筛选器1.0(tkinter+sqlite3+pandas)
功能说明:以下是一个使用Tkinter和Pandas实现的完整示例,支持Excel数据读取、双表格展示和高级条件筛选功能: 1.文件操作:点击"打开文件"按钮选择Excel文件(支持.xlsx和.xls格式),自…...
机器人--架构及设备
机器人的四大组成部分 控制系统 驱控系统 驱控驱动系统控制系统。 注意,这里的控制系统不是机器人层面的控制系统,属于更小层级的,驱控系统的控制系统。 驱动系统: 一般指硬件设备,比如电机驱动器,I/O…...
机器人--主机--控制系统
机器人主机 机器人主机,即控制系统。 作用 机器人主机的核心功能 传感器数据处理:处理摄像头、激光雷达、IMU等数据。 运行SLAM/导航算法:如Google Cartographer、RTAB-Map。 路径规划与控制:执行A*、DWA等算法。 通信管理&a…...
Stm32 烧录 Micropython
目录 前言 准备工作 开始操作 问题回顾 后记 前言 去年曾经尝试Pico制作openmv固件,由于知识储备不够最后失败了,留了一个大坑,有了前几天的基础,慢慢补齐知识,最近这一周一直在学习如何编译Stm固件并烧录到单片机…...
leetcode 977. Squares of a Sorted Array
题目描述 双指针法一 用right表示原数组中负数和非负数的分界线。 nums[0,right-1]的是负数,nums[right,nums.size()-1]是非负数。 然后用合并两个有序数组的方法。合并即可。 class Solution { public:vector<int> sortedSquares(vector<int>&…...
使用Nexus搭建远程maven仓库
1、Nexus介绍 Nexus 是 Sonatype 公司的一款用于搭建私服的产品,使用非常广泛。在早期,我们都拿Nexus当maven私服仓库,后来,随着版本不断更新,它支持的数据类型越来越多,比如npm仓库,nuget仓库&…...
坚鹏:工行《DEEPSEEK赋能银行智能办公及数字化营销服务》培训
中国工商银行上海市分行《DEEPSEEK赋能银行智能办公及数字化营销服务》培训圆满落幕 中国工商银行作为全球领先的综合性金融服务集团,始终走在金融科技创新的前沿。截至2024年末,工商银行总资产规模突破40万亿元,连续多年稳居全球银行榜首。在…...
操作系统OS是如何指挥外围设备的呢?
众所周知,OS的职责之一就是管理外围设备,比如常见的磁盘、硬盘、显示器、麦克风等,但并不是外围设备的一切都必须由OS管理,比如无线鼠标上的开关键,当你通过它关闭鼠标时,这个操作并不会经过OS,…...
实现Sentinel与Nacos的规则双向同步
实现Sentinel与Nacos的规则双向同步:完整解决方案 前言 在微服务架构中,流量控制和熔断降级是保障系统稳定性的重要手段。阿里开源的Sentinel作为一款轻量级的流量控制组件,常被用于实现这些功能。然而,在实际生产环境中&#x…...
2025五一杯数学建模A题:支路车流量推测问题,思路分析+模型代码
一持续更新,见文末名片 二、问题背景 想象一下,城市的道路如同一张巨大的脉络图,主路如同大动脉,配备着车流量监测设备,能实时记录车流量数据,就像我们身体的传感器一样。然而,当多条支路像毛细…...
Linux51 安装baidunetdisk yum install rpm -ivh
推测网卡 感觉是不是以前哪里设置了下 deepseek说的这个设置 我没有设置过 这个不会弄啊 准备用虚拟机安个软件 神奇 换了这个命令又能打开网卡了 参考了这个 参考 之前地址我觉得配置错误 动态分配 我就删掉ip地址了 路由表中无ip地址吗? OK 卸载 运…...
【Python-Day 8】从入门到精通:Python 条件判断 if-elif-else 语句全解析
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...
若依 FastAPI + Vue3 项目 Docker 部署笔记( 启动器打包教程)
本文记录了将 start.bat 打包成 .exe 启动器的详细教程,适合项目交付或导师演示用。 🧭 一、如何将 start.bat 打包为启动器 .exe(含图标 自动打开浏览器) ✅ 1. 创建三大功能脚本 start.bat → 启动项目(docke…...
Lebesgue测度和积分理论发展概观
1. 发展背景 积分可以从两个角度来理解。首先,积分是微分的逆函数,因此积分是反导数(译注:但积分是独立于微分的,不能微分的函数也可能可积)。然而,这是一个非常抽象的概念。其次,两点之间的积分可以看…...
算法题题型总结
二叉树题型 解法综述:二叉树的解法,基本上都是依赖遍历,再加上递归的思路来做的。那递归又分为深度优先和广度优先。深度优先算法,前序,中序,后序。广度优先,利用先进先出队列,一层…...
网络编程——TCP和UDP详细讲解
文章目录 TCP/UDP全面详解什么是TCP和UDP?TCP如何保证可靠性?1. 序列号(Sequence Number)2. 确认应答(ACK)3. 超时重传(Timeout Retransmission)4. 窗口控制(Sliding Win…...
Qt多线程TCP服务器实现指南
在Qt中实现多线程TCP服务器可以通过为每个客户端连接分配独立的线程来处理,以提高并发性能。以下是一个分步实现的示例: 1. 自定义工作线程类(处理客户端通信) // workerthread.h #include <QObject> #include <QTcpSo…...
【经管数据】A股上市公司资产定价效率数据(2000-2023年)
数据简介:资产定价效率是衡量市场是否能够有效、准确地反映资产内在价值的重要指标。在理想的市场条件下,资产的市场价格应该与其内在价值保持一致,即市场定价效率达到最高。然而,在实际市场中,由于信息不对称、交易摩…...
打包 Python 项目为 Windows 可执行文件:高效部署指南
Hypackpy 是一款由白月黑羽开发的 Python 项目打包工具,它与 PyInstaller 等传统工具不同,通过直接打包解释器环境和项目代码,并允许开发者修改配置文件以排除不需要的内容,从而创建方便用户一键运行的可执行程序。以下是使用 Hyp…...
【QNX+Android虚拟化方案】138 - USB 底层传输原理
【QNX+Android虚拟化方案】138 - USB 底层传输原理 1. USB 数据包的格式2. 数据传输事务过程3. 四种传输类型3.1 批量传输3.2 中断传输3.3 实时传输3.4 控制传输4. USB 设备枚举过程4.1 Attached: 发送控制传输,读取设备描述符4.2 Power -> Default 这个状态无数据传输4.3 …...
QT6 源(66)篇三:阅读与注释类 QAbstractSpinBox ,这是螺旋框的基类,附上源码
(9)所有代码来自于头文件 qabstractspinbox . h : #ifndef QABSTRACTSPINBOX_H #define QABSTRACTSPINBOX_H#include <QtWidgets/qtwidgetsglobal.h> #include <QtWidgets/qwidget.h> #include <QtGui/qvalidator.h>/* QT_CONFIG宏实…...
MCP入门
什么是mcp mcp(model context protocol,模型上下文协议) 标准化协议:让大模型用统一的方式来调用工具,是llm和工具之间的桥梁 A2A:Agent-to-Agent协议 mcp通信机制 提供mcp服务查询的平台 具有工具合集…...
FPGA中级项目8———UART-RAM-TFT
FPGA中级项目8———UART-RAM-TFT UART串口我们学过,RAM IP核学过,TFT同样也学过。那如何将它们联合起来呢? 言简意赅:实现从串口写入图像到RAM并且由TFT显示屏输出! 首先第一步,便是要将UART_RX与RAM之间…...
Ocelot\Consul\.NetCore的微服务应用案例
案例资料链接:https://download.csdn.net/download/ly1h1/90733765 1.效果 实现两个微服务ServerAPI1和ServerAPI2的负载均衡以及高可用。具体原理,看以下示意图。 2.部署条件 1、腾讯云的轻量化服务器 2、WindowServer2016 3、.NETCore7.0 4、Negut …...
数值求解Eikonal方程的方法及开源实现
Eikonal方程是一类非线性偏微分方程,形式为 ( |\nabla u(x)| f(x) ),常见于波传播、几何光学、最短路径等问题。以下是数值求解Eikonal方程的方法及开源实现参考: 一、数值求解方法 有限差分法(FDM) 快速行进法&#…...
Http详解
🧱 一、从 TCP 三次握手到访问网页:两层过程 🧩 1. TCP 三次握手(网络传输层) 这是 建立连接 的前提,跟 HTTP 无关,但 HTTP 要依赖它。 举例:你打开浏览器访问 https://example.c…...
实验五 完整性
一、引言 本次上机实验的目的主要是让学生掌握数据库完整性的三大类型(实体完整性、参照完整性、用户自定义完整性),并通过实际建库建表和数据操作加深理解。 下面将为分别展示 student、course、sc 三个表的创建语句,并设置对应的…...
《原码、反码与补码:计算机中的数字奥秘》
🚀个人主页:BabyZZの秘密日记 📖收入专栏:C语言 🌍文章目入 一、原码:最直观的表示法1. 正数的原码2. 负数的原码3. 原码的特点 二、反码:原码的“反转”1. 正数的反码2. 负数的反码3. 反码的特…...