重看Spring聚焦BeanDefinition分析和构造
目录
一、对BeanDefinition的理解
(一)理解元信息
(二)BeanDefinition理解分析
二、BeanDefinition的结构设计分析
(一)整体结构体会
(二)重要接口和类分析
三、构造 BeanDefinition:模式注解 + 组件扫描方式
四、构造 BeanDefinition:配置类 + @Bean 注解方式
五、构造 BeanDefinition:通过XML配置文件
六、构造 BeanDefinition:通过编程方式
七、对构造分析对比
干货分享,感谢您的阅读!
在这个迅速发展的技术时代,开源框架如春天般蓬勃生长,其中Spring框架则以其灵活性和强大功能赢得了开发者们的青睐。而在这个庞大的框架中,有一个小小的角色却承担着至关重要的任务,那就是BeanDefinition。它不仅是Spring容器的“元信息”守护者,更是实现高效、灵活应用的秘密武器。
想象一下,如果没有BeanDefinition,开发者们在创建和管理Bean时将面临怎样的混乱局面?是不是像失去了指南针的探险者,在茫茫大海中寻找方向?本文将带你深入探讨BeanDefinition的奥秘,从基本概念到实际应用,甚至是各种构造方式的对比分析,让你在一篇文章中全面理解这个看似不起眼但却不可或缺的组成部分。快来一起揭开BeanDefinition的面纱,看看它如何在背后默默地为你的应用程序提供支持和灵活性吧!
一、对BeanDefinition的理解
BeanDefinition 可以被认为是 Bean 的元信息。它不是 Bean 实例本身,而是描述了如何创建 Bean 实例以及 Bean 的配置信息。因此,BeanDefinition 提供了关于 Bean 的元数据,包括类名、作用域、构造函数参数、属性值等等。在 Spring 容器启动时,BeanDefinition 被解析并用于实例化和管理 Bean 实例。
(一)理解元信息
在计算机科学中,元信息是用于描述其他数据的数据。元信息提供关于数据的属性、结构、类型或其他相关信息,通常用于解释和管理数据,而不是直接操作数据本身。
在软件开发中,元信息的概念非常常见。比如,在数据库中,表的结构信息(如列名、数据类型、约束等)就是元信息;在编程语言中,注解(Annotation)提供了关于类、方法或字段的额外信息,也可以看作是元信息;在 Web 开发中,HTML 标签中的属性、HTTP 头部中的信息等都可以视为元信息。
(二)BeanDefinition理解分析
BeanDefinition 是关于 Bean 的元数据集合(包含了创建和管理 Bean 所需的所有信息),这些信息在 Spring 容器启动时被解析,并用于实例化和管理 Bean 实例。通过配置和操作 BeanDefinition可以控制和定制 Bean 的行为,实现更加灵活和高效的应用程序开发。具体的元信息可总结如下表进行查看:
| 元信息 | 描述 |
|---|---|
| 类信息 (Class Information) | Bean的类名,用于指定如何实例化Bean。 |
| 作用域信息 (Scope Information) | Bean的作用域,决定了Bean的生命周期范围,包括singleton、prototype、request、session等。 |
| 构造函数参数 (Constructor Arguments) | 描述了Bean构造函数的参数信息,用于实例化Bean对象。 |
| 属性信息 (Property Information) | 描述了Bean的属性值信息,包括属性名和属性值,用于在实例化后设置Bean的属性。 |
| 初始化和销毁方法 (Initialization and Destruction Methods) | 指定了Bean的初始化方法和销毁方法,用于在Bean实例化后或销毁前执行额外的操作。 |
| 依赖信息 (Dependency Information) | 描述了Bean之间的依赖关系,使得容器能够按正确的顺序实例化和管理Bean。 |
| 其他元信息 (Other Metadata) | 包括Bean的描述、别名等其他元信息,用于进一步描述Bean的用途和特性。 |
二、BeanDefinition的结构设计分析
(一)整体结构体会

(二)重要接口和类分析
我们选取一些重要接口和类整理表格来快速回顾(源码暂时不进行分析了):
| 接口/类 | 描述 |
|---|---|
| BeanDefinition 接口 | 定义了 Bean 的元信息,包括类名、作用域、构造函数参数、属性值等。 |
| AbstractBeanDefinition 抽象类 | BeanDefinition 接口的抽象实现类,提供了通用属性的默认实现,如 Bean 类型、作用域、懒加载等。 |
| GenericBeanDefinition 类 | AbstractBeanDefinition 的具体实现类,用于描述通用的 BeanDefinition 结构,适用于多种配置方式。 |
| RootBeanDefinition 类 | GenericBeanDefinition 的子类,增加了对 Bean 类型自动检测的支持,可以根据配置自动确定 Bean 的类型。 |
| AnnotatedBeanDefinition 接口 | 表示使用注解配置的 BeanDefinition,继承自 BeanDefinition 接口,用于描述通过注解方式配置的 Bean。 |
| BeanDefinitionHolder 类 | BeanDefinition 的持有者,包含一个 BeanDefinition 对象以及与之关联的名称和别名。 |
| BeanDefinitionRegistry 接口 | 定义了 BeanDefinition 注册的方法,允许向 Spring 容器注册新的 BeanDefinition,或者从容器中移除已有的 BeanDefinition。 |
| DefaultListableBeanFactory 类 | BeanDefinitionRegistry 接口的默认实现类,实现了 BeanDefinition 的注册和管理功能,是 Spring 容器的核心部分之一。 |
接下来我们重点看如何构造BeanDefinition。
三、构造 BeanDefinition:模式注解 + 组件扫描方式
基于约定优于配置的原则
使用注解(如 @Component、@Service、@Repository、@Controller 等)标记类,然后通过组件扫描(Component Scanning)方式,Spring 容器会自动扫描指定的包,并根据这些注解自动创建相应的 BeanDefinition。
这种方式在平时开发中最为常见,比如直接定义一个简单的组件类并用 @Component 注解进行标记如下:
package org.zyf.javabasic.spring.beandefinition;import org.springframework.stereotype.Component;/*** @program: zyfboot-javabasic* @description: 定义一个简单的组件类,并使用 @Component 注解进行标记* @author: zhangyanfeng* @create: 2024-05-02 11:03**/
@Component
public class ZyfComponent {public void sayHello() {System.out.println("Hello from ZyfComponent!");}
}
为符合其构造,我们在定义一个配置类并在其中启用组件扫描如下:
package org.zyf.javabasic.spring.beandefinition;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;/*** @program: zyfboot-javabasic* @description: 定义一个配置类,并在其中启用组件扫描。* @author: zhangyanfeng* @create: 2024-05-02 11:08**/
@Configuration
@ComponentScan("org.zyf.javabasic.spring.beandefinition")
public class ZyfAppConfig {// 配置类的其他内容
}
直接验证如下:Spring 容器在启动时扫描指定包路径下的组件类,并将标记了 @Component 注解的类注册为 BeanDefinition,这样就可以方便地在应用程序中使用这些 Bean。
package org.zyf.javabasic.spring.beandefinition;import org.springframework.context.annotation.AnnotationConfigApplicationContext;/*** @program: zyfboot-javabasic* @description: ceshi* @author: zhangyanfeng* @create: 2024-05-02 11:09**/
public class ZyfApplication {public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ZyfAppConfig.class);ZyfComponent myComponent = context.getBean(ZyfComponent.class);myComponent.sayHello();context.close();}
}

四、构造 BeanDefinition:配置类 + @Bean 注解方式
显式配置每个 Bean 的创建过程
创建一个配置类,通常使用 @Configuration 注解标记,在这个类中,使用 @Bean 注解标记方法,方法返回的对象就是一个 Bean。
简单来说,可以先创建一个普通的 Java 类作为需要被 Spring 管理的 Bean:
package org.zyf.javabasic.spring.beandefinition;/*** @program: zyfboot-javabasic* @description: 创建一个普通的 Java 类,作为需要被 Spring 管理的 Bean。* @author: zhangyanfeng* @create: 2024-05-02 11:18**/
public class ZyfService {public void performAction() {System.out.println("Performing action in MyService!");}
}
在刚刚创建的配置类ZyfAppConfig中使用 @Bean 注解标记方法增加即可:
package org.zyf.javabasic.spring.beandefinition;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;/*** @program: zyfboot-javabasic* @description: 定义一个配置类,并在其中启用组件扫描。* @author: zhangyanfeng* @create: 2024-05-02 11:08**/
@Configuration
@ComponentScan("org.zyf.javabasic.spring.beandefinition")
public class ZyfAppConfig {// 配置类的其他内容@Beanpublic ZyfService zyfService() {return new ZyfService();}
}
直接验证如下:
package org.zyf.javabasic.spring.beandefinition;import org.springframework.context.annotation.AnnotationConfigApplicationContext;/*** @program: zyfboot-javabasic* @description: ceshi* @author: zhangyanfeng* @create: 2024-05-02 11:09**/
public class ZyfApplication {public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ZyfAppConfig.class);ZyfComponent myComponent = context.getBean(ZyfComponent.class);myComponent.sayHello();ZyfService zyfService = context.getBean(ZyfService.class);zyfService.performAction();context.close();}
}
返回结果符合预期。

五、构造 BeanDefinition:通过XML配置文件
通过 XML 配置文件构造 BeanDefinition 是 Spring 框架最传统的方式之一。
传统的方式是通过 XML 配置文件来定义 Bean,XML 配置文件中的 <bean> 元素就是描述 BeanDefinition 的方式之一。
现在,我们将之前的ZyfService配置到XML 配置文件中如下:
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- <bean id="myTestMsgBean" class="org.zyf.javabasic.springextend.bfppext.MyTestMsgBean">-->
<!-- <property name="message" value="Original Message"/>-->
<!-- </bean>--><!-- <bean class="org.zyf.javabasic.springextend.bfppext.MyBeanFactoryPostProcessorForUpdateBean"/>-->
<!-- <bean class="org.zyf.javabasic.springextend.bfppext.MyBeanFactoryPostProcessorForNewDefinRegi"/>-->
<!-- <bean class="org.zyf.javabasic.springextend.bfppext.MyBeanFactoryPostProcessorForDefineMata"/>--><bean id="zyfService" class="org.zyf.javabasic.spring.beandefinition.ZyfService"/></beans>
使用 ClassPathXmlApplicationContext 类来加载配置文件,从而启动 Spring 容器如下:
package org.zyf.javabasic.spring.beandefinition;import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** @program: zyfboot-javabasic* @description: ceshi* @author: zhangyanfeng* @create: 2024-05-02 11:09**/
public class ZyfApplication {public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ZyfAppConfig.class);ZyfComponent myComponent = context.getBean(ZyfComponent.class);myComponent.sayHello();ZyfService zyfService = context.getBean(ZyfService.class);zyfService.performAction();ClassPathXmlApplicationContext contextXml = new ClassPathXmlApplicationContext("zyf_application_context.xml");ZyfService myServiceXml = context.getBean("zyfService", ZyfService.class);myServiceXml.performAction();context.close();}
}

六、构造 BeanDefinition:通过编程方式
通过编程方式构造 BeanDefinition允许开发人员完全控制 BeanDefinition 的创建过程。
我们可以使用 Spring 提供的类(如 GenericBeanDefinition、RootBeanDefinition 等)来创建 BeanDefinition 对象,并指定 Bean 的各种属性和配置信息。
也就是可以直接操作代码即可,在原始代码上直接修改如下:
package org.zyf.javabasic.spring.beandefinition;import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.support.GenericBeanDefinition;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** @program: zyfboot-javabasic* @description: ceshi* @author: zhangyanfeng* @create: 2024-05-02 11:09**/
public class ZyfApplication {public static void main(String[] args) {System.out.println("===================通过模式注解 + 组件扫描方式===================");AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ZyfAppConfig.class);ZyfComponent myComponent = context.getBean(ZyfComponent.class);myComponent.sayHello();System.out.println("===================通过配置类 + @Bean 注解方式===================");ZyfService zyfService = context.getBean(ZyfService.class);zyfService.performAction();System.out.println("===================通过XML配置文件方式===================");ClassPathXmlApplicationContext contextXml = new ClassPathXmlApplicationContext("zyf_application_context.xml");ZyfService myServiceXml = context.getBean("zyfService", ZyfService.class);myServiceXml.performAction();System.out.println("===================通过编程方式===================");// 创建一个 BeanDefinition,并指定类名GenericBeanDefinition beanDefinition = new GenericBeanDefinition();beanDefinition.setBeanClass(ZyfService.class);// 将 BeanDefinition 注册到 Spring 容器中DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory) context.getBeanFactory();beanFactory.registerBeanDefinition("zyfService", beanDefinition);// 获取 Bean,并调用方法ZyfService myService = context.getBean("zyfService", ZyfService.class);myService.performAction();context.close();}
}
验证打印如下,符合预期。

七、对构造分析对比
| 方式 | 配置灵活性 | 可读性和维护性 | 适用场景 |
|---|---|---|---|
| 模式注解 + 组件扫描方式 | 配置简单,基于约定优于配置的原则 适用于大部分情况 | 配置简单,但可能导致扫描过多的类,降低可读性 | 简单的项目或小规模团队 快速开发原型或中小型项目 |
| 配置类 + @Bean 注解方式 | 灵活性更高,可以通过代码进行复杂的配置和逻辑处理 | 相对易读,也更易于维护,因为 Bean 的创建过程明确可见 | 需要更灵活配置的项目 对可维护性要求较高的大型项目 |
| 通过 XML 配置文件 | 传统方式,配置直观,但可读性较差 | 相对直观,但随项目规模增大,配置文件可能变得臃肿 | 传统项目 需要与其他框架整合的场景 |
| 通过编程方式 | 灵活性最高,可以完全控制 BeanDefinition 的创建过程 | -代码量较多,可读性较差,维护成本相对较高 | 需要动态配置 BeanDefinition 的场景 需要在运行时动态注册 Bean 的场景 |
参考链接和文章
Java-based Container Configuration :: Spring Framework
Bean Scopes :: Spring Framework
Container Overview :: Spring Framework
相关文章:
重看Spring聚焦BeanDefinition分析和构造
目录 一、对BeanDefinition的理解 (一)理解元信息 (二)BeanDefinition理解分析 二、BeanDefinition的结构设计分析 (一)整体结构体会 (二)重要接口和类分析 三、构造 BeanDef…...
2025年新型智慧城市整体解决方案下载:顶层规划设计,应用总体建设方案
一、引言 随着信息技术的飞速发展和城市化进程的加速,智慧城市已成为未来城市发展的新趋势。新型智慧城市通过深度融合物联网、大数据、云计算、人工智能等先进技术,旨在实现城市管理的智能化、精细化和服务的人性化,提升城市治理效能&#…...
【旋转框目标检测】基于YOLO11/v8深度学习的遥感视角船只智能检测系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】
《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...
【物联网】电子电路基础知识
文章目录 一、基本元器件1. 电阻2. 电容3. 电感4. 二极管(1)符号(2)特性(3)实例分析5. 三极管(1)符号(2)开关特性(3)实例6. MOS管(产效应管)(1)符号(2)MOS管极性判定(3)MOS管作为开关(4)MOS管vs三极管7. 门电路(1)与门(2)或门(3)非门二、常用元器件…...
Linux-GlusterFS配置
文章目录 GlusterFS配置 🏡作者主页:点击! 🤖Linux专栏:点击! ⏰️创作时间:2025年02月18日19点21分 GlusterFS配置 1、分区操作 fdisk -l #查看本地磁盘 fdisk /dev/vdb #对/dev/vdb进…...
IIS asp.net权限不足
检查应用程序池的权限 IIS 应用程序池默认使用一个低权限账户(如 IIS_IUSRS),这可能导致无法删除某些文件或目录。可以通过以下方式提升权限: 方法 1:修改应用程序池的标识 打开 IIS 管理器。 在左侧导航树中&#x…...
centos 9 时间同步服务
在 CentOS 9 中,默认的时间同步服务是 chrony,而不是传统的 ntpd。 因此,建议使用 chrony 来配置和管理时间同步。 以下是使用 chrony 配置 NTP 服务的步骤: 1. 安装 chrony 首先,确保系统已安装 chrony。 在 CentOS…...
使用Java爬虫获取1688按图搜索商品(拍立淘API接口)
在电商领域,按图搜索商品(拍立淘)是一种非常实用的功能,尤其适合用户通过图片快速查找相似商品。1688开放平台提供了按图搜索商品的API接口,允许开发者通过图片获取相关的商品信息。本文将详细介绍如何使用Java爬虫技术…...
DeepSeek 助力 Vue 开发:打造丝滑的范围选择器(Range Picker)
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
常用标准库之-std::iota
定义与头文件 std::iota 是 C 标准库 <algorithm> 头文件中提供的一个算法,用于将一个连续递增的值赋给指定范围内的元素。 函数原型 template< class ForwardIt, class T > void iota( ForwardIt first, ForwardIt last, T value );ForwardIt&#…...
Linux环境Docker使用代理推拉镜像
闲扯几句 不知不觉已经2月中了,1个半月忙得没写博客,这篇其实很早就想写了(可追溯到Docker刚刚无法拉镜像的时候),由于工作和生活上的事比较多又在备考软考架构,拖了好久…… 简单记录下怎么做的…...
SCI学术论文图片怎么免费绘制:drawio,gitmind
SCI学术论文图片怎么免费绘制 目录 SCI学术论文图片怎么免费绘制overleaf怎么图片不清晰怎么办SCI学术论文图片怎么导出pdfdrawiogitmind**1. 使用在线工具****Lucidchart****2. Draw.io****3. ProcessOn****4. 使用桌面工具****Dia****5. 使用Markdown工具(如Typora)**如果你…...
伯克利 CS61A 课堂笔记 10 —— Trees
本系列为加州伯克利大学著名 Python 基础课程 CS61A 的课堂笔记整理,全英文内容,文末附词汇解释。 目录 01 Trees 树 Ⅰ Tree Abstraction Ⅱ Implementing the Tree Abstraction 02 Tree Processing 建树过程 Ⅰ Fibonacci tree Ⅱ Tree Process…...
全局动态组件uniapp(vue)
全局动态组件uniapp(vue) 在我们很多项目中,我们需要创建一个组件,使其他在所有的路由页都存在,比如手机上的悬浮在屏幕上的圆形快捷按钮,那么我们就需要创建一个全局组件。 创建组件时我们所考虑的主要是两个点,一个…...
spring分层解耦(springboot)
三层架构 三层架构在项目文件中的分布 软件设计的原则,高内聚低耦合 高内聚:软件中各个功能模块内部的功能联系紧密,每个模块的功能实现具体 低耦合:软件中各个层/模块之间的依赖,关联的程度低 分层解耦的思想 IOC&…...
最新智能优化算法:牛优化( Ox Optimizer,OX)算法求解经典23个函数测试集,MATLAB代码
一、牛优化算法 牛优化( OX Optimizer,OX)算法由 AhmadK.AlHwaitat 与 andHussamN.Fakhouri于2024年提出,该算法的设计灵感来源于公牛的行为特性。公牛以其巨大的力量而闻名,能够承载沉重的负担并进行远距离运输。这种…...
尚硅谷 java 学习Day19 抽象类与抽象方法、接口、内部类
6-5 抽象类(abstract)与抽象方法(important) 一、什么叫抽象类: 有时候将一个父类设计的非常抽象,以至于它没有具体的实例,这样的类称为抽象类 abstract关键字的使用: 1、abstract:抽象的 2、abs…...
机器学习数理基础:从概率到梯度下降的全面解析
一、引言:为什么需要数理基础? 机器学习是数据与算法的艺术,而数学是其背后的语言。无论是理解模型原理、优化算法,还是解决实际问题,扎实的数理基础都是必不可少的。本文将从概率论、线性代数、微积分三大核心领域出发…...
数据结构:哈希
哈希函数的概念:哈希函数是哈希表(散列表)的核心组件,其作用是将任意长度的键(Key)映射为固定长度的存储地址,以实现高效的数据存储与检索。以下是哈希函数在数据结构中的关键知识点总结&#x…...
Openssl交叉编译
在 OpenSSL 交叉编译中,linux-aarch64是一个用于指定目标平台的配置选项,表示目标是 X86 架构的 64位系统。这个选项可以从 OpenSSL 的 ./Configure 命令支持的平台列表中获取。 你可以通过运行以下命令查看 OpenSSL 支持的所有平台配置选项:…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...
