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

Spring IoC容器的设计与实现

Spring整体架构与模块划分

核心容器(Core Container)
  • spring-core
    • 基础工具类:如资源加载(Resource接口)、反射工具(ReflectionUtils)、类型转换(ConversionService)。
    • 核心接口BeanFactory(IoC容器的基本定义)。
  • spring-beans
    • Bean的定义与依赖管理BeanDefinition(描述Bean的元数据)、BeanWrapper(Bean属性操作)。
    • Bean的实例化与生命周期管理AbstractAutowireCapableBeanFactory(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-methoddestroy-method 回调。
    • 层级容器(Hierarchical Containers):通过 HierarchicalBeanFactory 接口支持父子容器。
  • 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 = ...; // 三级缓存(工厂对象)
    
核心区别
对比项BeanFactoryApplicationContext
功能定位基础容器,仅提供 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,如singletonprototype
  • 是否延迟加载lazyInit
  • 初始化/销毁方法initMethodNamedestroyMethodName
  • 依赖关系(通过构造函数参数或属性注入)
  • 工厂方法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>标签,处理属性(如idclassscope)和子元素。
注解配置的加载与解析流程
  • 组件扫描与注解处理器
    • 入口类ClassPathBeanDefinitionScanner(负责扫描类路径下的注解类)。
    • 核心注解@Component(及其派生注解@Service等)、@Configuration@Bean@Autowired@Value
  • 组件扫描流程
    • 配置扫描路径:通过@ComponentScan(basePackages = "com.example")指定包路径。
    • 类路径扫描:使用ClassPathScanningCandidateComponentProvider筛选候选类。
    • 生成BeanDefinition:对带有@Component的类生成ScannedGenericBeanDefinition
  • 注解解析的核心类
    • AnnotatedBeanDefinitionReader:处理@Configuration类中的@Bean方法,将其转换为ConfigurationClassBeanDefinition
    • AutowiredAnnotationBeanPostProcessor:处理@Autowired@Value注解,实现依赖注入。

Bean的实例化过程:构造函数、工厂方法

Bean实例化整体流程
  • 实例化(Instantiation):创建Bean的原始对象(通过构造函数或工厂方法)。
  • 属性填充(Population):依赖注入(DI)及设置属性值。
  • 初始化(Initialization):调用初始化方法(如init-method)及应用后置处理器。
  • 销毁(Destruction)(可选):容器关闭时调用销毁方法。
实例化阶段(Instantiation)
  • 目标:根据Bean定义创建Bean的原始对象。

  • 默认构造函数:无参构造函数(最常见方式)。

  • 静态工厂方法:通过factory-method指定静态方法。

  • 实例工厂方法:通过factory-beanfactory-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整体架构与模块划分 核心容器&#xff08;Core Container&#xff09; spring-core 基础工具类&#xff1a;如资源加载&#xff08;Resource接口&#xff09;、反射工具&#xff08;ReflectionUtils&#xff09;、类型转换&#xff08;ConversionService&#xff09;。…...

使用vue的插值表达式渲染变量,格式均正确,但无法渲染

如图&#xff0c;作者遇到的问题为&#xff0c;输入以下代码 <!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位&#xff0c;还有一位是A7~A0就是透明通道&#xff0c;32位ARG8888。 1.1.3、LCD 屏幕接口 1.1.4、LCD 时间参数 如果将 LCD 显示一帧图像的过程想象成绘画&#xff0c;那么…...

Angular教程前言:历史、安装与用途

Angular 是一个强大且流行的开源前端 Web 应用程序框架&#xff0c;由 Google 开发并维护 1。它在现代 Web 开发中占据着重要的地位&#xff0c;尤其在构建动态、高效且可扩展的 Web 应用程序方面表现出色&#xff0c;特别适用于单页应用程序 (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图片导入设置

&#x1f3c6; 个人愚见&#xff0c;没事写写笔记 &#x1f3c6;《博客内容》&#xff1a;Unity3D开发内容 &#x1f3c6;&#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f50e;Unity支持的图片格式 ☀️BMP:是Windows操作系统的标准图像文件格式&#xff0c;特点是…...

MySQL与分布式架构的碰撞

目录 一、分布式架构的核心挑战与MySQL的应对策略 1.1 高并发与扩展性 1.3 高可用与容灾 二、MySQL分布式架构的核心技术实现 2.1 读写分离与主从复制&#xff08;扩展&#xff09; 2.2 数据分片与分布式存储&#xff08;扩展&#xff09; 2.3 MySQL Cluster与NDB引擎&am…...

python-MySQL鏈接

python鏈接MySQL&#xff0c;主要利用庫 pip install mysql-connector-pythonimport mysql.connector# 配置连接参数 config {"user": "your_username","password": "your_password","host": "localhost", # 或…...

cv::remap() 和 cv::undistortion() 的区别

在 OpenCV 中&#xff0c;cv::remap 和 cv::undistort 都用于处理图像畸变校正&#xff0c;但它们的实现方式和应用场景有显著区别。以下是详细对比&#xff1a; 1. cv::undistort&#xff1a;直接畸变校正 功能 输入&#xff1a;原始畸变图像 相机内参矩阵 (cameraMatrix) …...

【AI提示词】决策树专家

提示说明 一位熟悉决策树算法的机器学习专家&#xff0c;擅长用树状图量化不同选择的结果概率。 提示词 # Role: 决策树专家## Profile - language: 中文 - description: 一位熟悉决策树算法的机器学习专家&#xff0c;擅长用树状图量化不同选择的结果概率 - background: 决…...

【中间件】bthread_数据结构_学习笔记

bthread数据结构 bthread_数据结构_学习笔记1 pthread_cond_t1.1 definition1.2 解释1.3 设计动机1.4 使用示例1.5 注意事项1.6 进一步延伸&#xff1a;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虚拟机选择自定义&#xff0c;然后一直傻瓜式下一步 3.选择编辑虚拟机设置&#xff0c;然后选择刚刚下载的ISO 4.输入 ip addr 获取ip地址 5.用Xshell连接 1.下载CentOS7.9 链接&#xff1a;https://pan.baidu.com/s/1kW2gGWnbcjNtq4kz46LKVw?p…...

C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 18)

&#x1f381;个人主页&#xff1a;工藤新一 &#x1f50d;系列专栏&#xff1a;C面向对象&#xff08;类和对象篇&#xff09; &#x1f31f;心中的天空之城&#xff0c;终会照亮我前方的路 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 文章目录 二…...

Cribl 数据脱敏 更多方法 MASK (三)

我做过好几个cribl 数据脱敏的实验: Cribl 脱敏mask-CSDN博客...

【笔记】深度学习模型训练的 GPU 内存优化之旅⑤:内存分配篇

开设此专题&#xff0c;目的一是梳理文献&#xff0c;目的二是分享知识。因为笔者读研期间的研究方向是单卡上的显存优化&#xff0c;所以最初思考的专题名称是“显存突围&#xff1a;深度学习模型训练的 GPU 内存优化之旅”&#xff0c;英文缩写是 “MLSys_GPU_Memory_Opt”。…...

【5G 架构】边缘计算平台是如何与3GPP网络连接的?

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G技术研究。 博客内容主要围绕…...

5.0.0 GripSpliter的使用(探讨水平竖直对齐参数)

布局控件Grid 配合 GridSplitter 无需编写任何代码 就能实现网格大小可拖动。 其HorizontalAlignment、VerticalAlignment属性的使用非常具有迷惑性;本文做了一些一些实验,总结为把这两个属性均设置为strech即可。 总结如下:经过实验,发现以下情况可以正常工作。 水平方向…...

python如何把pdf转word

在Python中将PDF转换为Word文档&#xff08;.docx&#xff09;比反向转换&#xff08;Word转PDF&#xff09;更具挑战性&#xff0c;因为PDF是固定格式&#xff0c;而Word是可编辑格式。以下是几种可行的方法及详细步骤&#xff1a; 方法1&#xff1a;使用 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&#xff08;VS&#xff09;中遇到提示“以下文件中的行尾不一致。是否将行尾标准化&#xff1f;”时&#xff0c;意味着当前打开或正在编辑的文件内部存在行尾符&#xff08;EOL&#xff0c;End-Of-Line&#xff09;格式不统一的情况。以下是详细解释和应对建议…...

C 语言 第五章 指针(5)

目录 函数参数传递机制&#xff1a;地址传递 值传递 简单变量指针作为形参 举例1&#xff1a; 举例2&#xff1a; 举例3&#xff1a; 数组作为形参 举例&#xff1a; 函数参数传递机制&#xff1a;地址传递 值传递 void test(int a, int b) { a 10; b 20; print…...

Python项目源码69:Excel数据筛选器1.0(tkinter+sqlite3+pandas)

功能说明&#xff1a;以下是一个使用Tkinter和Pandas实现的完整示例&#xff0c;支持Excel数据读取、双表格展示和高级条件筛选功能&#xff1a; 1.文件操作&#xff1a;点击"打开文件"按钮选择Excel文件&#xff08;支持.xlsx和.xls格式&#xff09;&#xff0c;自…...

机器人--架构及设备

机器人的四大组成部分 控制系统 驱控系统 驱控驱动系统控制系统。 注意&#xff0c;这里的控制系统不是机器人层面的控制系统&#xff0c;属于更小层级的&#xff0c;驱控系统的控制系统。 驱动系统&#xff1a; 一般指硬件设备&#xff0c;比如电机驱动器&#xff0c;I/O…...

机器人--主机--控制系统

机器人主机 机器人主机&#xff0c;即控制系统。 作用 机器人主机的核心功能 传感器数据处理&#xff1a;处理摄像头、激光雷达、IMU等数据。 运行SLAM/导航算法&#xff1a;如Google Cartographer、RTAB-Map。 路径规划与控制&#xff1a;执行A*、DWA等算法。 通信管理&a…...

Stm32 烧录 Micropython

目录 前言 准备工作 开始操作 问题回顾 后记 前言 去年曾经尝试Pico制作openmv固件&#xff0c;由于知识储备不够最后失败了&#xff0c;留了一个大坑&#xff0c;有了前几天的基础&#xff0c;慢慢补齐知识&#xff0c;最近这一周一直在学习如何编译Stm固件并烧录到单片机…...

leetcode 977. Squares of a Sorted Array

题目描述 双指针法一 用right表示原数组中负数和非负数的分界线。 nums[0,right-1]的是负数&#xff0c;nums[right,nums.size()-1]是非负数。 然后用合并两个有序数组的方法。合并即可。 class Solution { public:vector<int> sortedSquares(vector<int>&…...

使用Nexus搭建远程maven仓库

1、Nexus介绍 Nexus 是 Sonatype 公司的一款用于搭建私服的产品&#xff0c;使用非常广泛。在早期&#xff0c;我们都拿Nexus当maven私服仓库&#xff0c;后来&#xff0c;随着版本不断更新&#xff0c;它支持的数据类型越来越多&#xff0c;比如npm仓库&#xff0c;nuget仓库&…...

坚鹏:工行《DEEPSEEK赋能银行智能办公及数字化营销服务》培训

中国工商银行上海市分行《DEEPSEEK赋能银行智能办公及数字化营销服务》培训圆满落幕 中国工商银行作为全球领先的综合性金融服务集团&#xff0c;始终走在金融科技创新的前沿。截至2024年末&#xff0c;工商银行总资产规模突破40万亿元&#xff0c;连续多年稳居全球银行榜首。在…...

操作系统OS是如何指挥外围设备的呢?

众所周知&#xff0c;OS的职责之一就是管理外围设备&#xff0c;比如常见的磁盘、硬盘、显示器、麦克风等&#xff0c;但并不是外围设备的一切都必须由OS管理&#xff0c;比如无线鼠标上的开关键&#xff0c;当你通过它关闭鼠标时&#xff0c;这个操作并不会经过OS&#xff0c;…...

实现Sentinel与Nacos的规则双向同步

实现Sentinel与Nacos的规则双向同步&#xff1a;完整解决方案 前言 在微服务架构中&#xff0c;流量控制和熔断降级是保障系统稳定性的重要手段。阿里开源的Sentinel作为一款轻量级的流量控制组件&#xff0c;常被用于实现这些功能。然而&#xff0c;在实际生产环境中&#x…...

2025五一杯数学建模A题:支路车流量推测问题,思路分析+模型代码

一持续更新&#xff0c;见文末名片 二、问题背景 想象一下&#xff0c;城市的道路如同一张巨大的脉络图&#xff0c;主路如同大动脉&#xff0c;配备着车流量监测设备&#xff0c;能实时记录车流量数据&#xff0c;就像我们身体的传感器一样。然而&#xff0c;当多条支路像毛细…...

Linux51 安装baidunetdisk yum install rpm -ivh

推测网卡 感觉是不是以前哪里设置了下 deepseek说的这个设置 我没有设置过 这个不会弄啊 准备用虚拟机安个软件 神奇 换了这个命令又能打开网卡了 参考了这个 参考 之前地址我觉得配置错误 动态分配 我就删掉ip地址了 路由表中无ip地址吗&#xff1f; OK 卸载 运…...

【Python-Day 8】从入门到精通:Python 条件判断 if-elif-else 语句全解析

Langchain系列文章目录 01-玩转LangChain&#xff1a;从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块&#xff1a;四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain&#xff1a;从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...

若依 FastAPI + Vue3 项目 Docker 部署笔记( 启动器打包教程)

本文记录了将 start.bat 打包成 .exe 启动器的详细教程&#xff0c;适合项目交付或导师演示用。 &#x1f9ed; 一、如何将 start.bat 打包为启动器 .exe&#xff08;含图标 自动打开浏览器&#xff09; ✅ 1. 创建三大功能脚本 start.bat → 启动项目&#xff08;docke…...

Lebesgue测度和积分理论发展概观

1. 发展背景 积分可以从两个角度来理解。首先&#xff0c;积分是微分的逆函数&#xff0c;因此积分是反导数(译注&#xff1a;但积分是独立于微分的&#xff0c;不能微分的函数也可能可积)。然而&#xff0c;这是一个非常抽象的概念。其次&#xff0c;两点之间的积分可以看…...

算法题题型总结

二叉树题型 解法综述&#xff1a;二叉树的解法&#xff0c;基本上都是依赖遍历&#xff0c;再加上递归的思路来做的。那递归又分为深度优先和广度优先。深度优先算法&#xff0c;前序&#xff0c;中序&#xff0c;后序。广度优先&#xff0c;利用先进先出队列&#xff0c;一层…...

网络编程——TCP和UDP详细讲解

文章目录 TCP/UDP全面详解什么是TCP和UDP&#xff1f;TCP如何保证可靠性&#xff1f;1. 序列号&#xff08;Sequence Number&#xff09;2. 确认应答&#xff08;ACK&#xff09;3. 超时重传&#xff08;Timeout Retransmission&#xff09;4. 窗口控制&#xff08;Sliding Win…...

Qt多线程TCP服务器实现指南

在Qt中实现多线程TCP服务器可以通过为每个客户端连接分配独立的线程来处理&#xff0c;以提高并发性能。以下是一个分步实现的示例&#xff1a; 1. 自定义工作线程类&#xff08;处理客户端通信&#xff09; // workerthread.h #include <QObject> #include <QTcpSo…...

【经管数据】A股上市公司资产定价效率数据(2000-2023年)

数据简介&#xff1a;资产定价效率是衡量市场是否能够有效、准确地反映资产内在价值的重要指标。在理想的市场条件下&#xff0c;资产的市场价格应该与其内在价值保持一致&#xff0c;即市场定价效率达到最高。然而&#xff0c;在实际市场中&#xff0c;由于信息不对称、交易摩…...

打包 Python 项目为 Windows 可执行文件:高效部署指南

Hypackpy 是一款由白月黑羽开发的 Python 项目打包工具&#xff0c;它与 PyInstaller 等传统工具不同&#xff0c;通过直接打包解释器环境和项目代码&#xff0c;并允许开发者修改配置文件以排除不需要的内容&#xff0c;从而创建方便用户一键运行的可执行程序。以下是使用 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 ,这是螺旋框的基类,附上源码

&#xff08;9&#xff09;所有代码来自于头文件 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&#xff08;model context protocol&#xff0c;模型上下文协议&#xff09; 标准化协议&#xff1a;让大模型用统一的方式来调用工具&#xff0c;是llm和工具之间的桥梁 A2A&#xff1a;Agent-to-Agent协议 mcp通信机制 提供mcp服务查询的平台 具有工具合集…...

FPGA中级项目8———UART-RAM-TFT

FPGA中级项目8———UART-RAM-TFT UART串口我们学过&#xff0c;RAM IP核学过&#xff0c;TFT同样也学过。那如何将它们联合起来呢&#xff1f; 言简意赅&#xff1a;实现从串口写入图像到RAM并且由TFT显示屏输出&#xff01; 首先第一步&#xff0c;便是要将UART_RX与RAM之间…...

Ocelot\Consul\.NetCore的微服务应用案例

案例资料链接&#xff1a;https://download.csdn.net/download/ly1h1/90733765 1.效果 实现两个微服务ServerAPI1和ServerAPI2的负载均衡以及高可用。具体原理&#xff0c;看以下示意图。 2.部署条件 1、腾讯云的轻量化服务器 2、WindowServer2016 3、.NETCore7.0 4、Negut …...

数值求解Eikonal方程的方法及开源实现

Eikonal方程是一类非线性偏微分方程&#xff0c;形式为 ( |\nabla u(x)| f(x) )&#xff0c;常见于波传播、几何光学、最短路径等问题。以下是数值求解Eikonal方程的方法及开源实现参考&#xff1a; 一、数值求解方法 有限差分法&#xff08;FDM&#xff09; 快速行进法&#…...

Http详解

&#x1f9f1; 一、从 TCP 三次握手到访问网页&#xff1a;两层过程 &#x1f9e9; 1. TCP 三次握手&#xff08;网络传输层&#xff09; 这是 建立连接 的前提&#xff0c;跟 HTTP 无关&#xff0c;但 HTTP 要依赖它。 举例&#xff1a;你打开浏览器访问 https://example.c…...

实验五 完整性

一、引言 本次上机实验的目的主要是让学生掌握数据库完整性的三大类型&#xff08;实体完整性、参照完整性、用户自定义完整性&#xff09;&#xff0c;并通过实际建库建表和数据操作加深理解。 下面将为分别展示 student、course、sc 三个表的创建语句&#xff0c;并设置对应的…...

《原码、反码与补码:计算机中的数字奥秘》

&#x1f680;个人主页&#xff1a;BabyZZの秘密日记 &#x1f4d6;收入专栏&#xff1a;C语言 &#x1f30d;文章目入 一、原码&#xff1a;最直观的表示法1. 正数的原码2. 负数的原码3. 原码的特点 二、反码&#xff1a;原码的“反转”1. 正数的反码2. 负数的反码3. 反码的特…...