news 2026/6/22 21:19:37

BeanDefinition

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
BeanDefinition

一、先给你一句“总定义”(非常重要)

BeanDefinition 是 Spring 用来“描述 Bean 的元数据模型”,不是 Bean 本身,而是“如何创建 Bean 的说明书”。

📌 Spring IOC 的本质就是:

BeanDefinition + BeanFactory = Bean


二、BeanDefinition 在 Spring 中的地位(核心)

Spring IOC 容器做的所有事,本质只有三步:

1️⃣ 读取 / 构建 BeanDefinition 2️⃣ 注册 BeanDefinition 到容器 3️⃣ 根据 BeanDefinition 创建 Bean

所以你看到的:

  • XML

  • @Component

  • @Bean

  • 动态注册 Bean

  • 自动装配

👉最终都会被统一转换成 BeanDefinition


三、BeanDefinition 是“描述什么”的?(内容全览)

1️⃣ Bean 的基本信息

属性说明
beanClassNameBean 的类名
beanClassClass 对象(解析后)
scopesingleton / prototype
lazyInit是否懒加载
abstract是否抽象
factoryBeanName工厂 Bean 名
factoryMethodName工厂方法

2️⃣ 构造相关信息

属性说明
constructorArgumentValues构造方法参数
resolvedConstructorOrFactoryMethod解析后的构造方法
autowireMode构造 / byType / byName

3️⃣ 属性注入信息

属性说明
propertyValuessetter 注入
dependsOn依赖的 Bean
autowireCandidate是否参与自动注入
primary是否主 Bean

4️⃣ 生命周期方法

属性说明
initMethodName初始化方法
destroyMethodName销毁方法
enforceInitMethod是否强制调用
enforceDestroyMethod是否强制调用

5️⃣ 注解 & 条件信息

内容来源
@LazylazyInit
@DependsOndependsOn
@Primaryprimary
@Rolerole
@Conditionalcondition
@Profileprofile

四、BeanDefinition 的继承体系(非常重要)

BeanDefinition (接口) | ├── AbstractBeanDefinition | | | ├── RootBeanDefinition | ├── ChildBeanDefinition | ├── GenericBeanDefinition | ├── AnnotatedBeanDefinition


1️⃣ BeanDefinition(接口)

最顶层抽象,只定义规范。


2️⃣ AbstractBeanDefinition(核心实现)

99% 的属性都在这里

  • scope

  • lazyInit

  • autowire

  • initMethod

  • destroyMethod

  • constructor args

  • property values

📌Spring 内部几乎全操作它


3️⃣ RootBeanDefinition(最终形态)

真正用来创建 Bean 的定义

  • 父子合并后的结果

  • Spring 创建 Bean 前生成

  • 会被缓存(非常重要)

📌你几乎不直接 new 它


4️⃣ GenericBeanDefinition(通用定义)

最“干净”、最常用的注册形态

  • 没有 parent

  • 非 merged

  • 适合动态注册 Bean

你现在用的BeanDefinitionBuilder
👉 内部就是GenericBeanDefinition


5️⃣ AnnotatedBeanDefinition(注解 Bean)

用于:

  • @Component

  • @Configuration

  • @Bean

额外包含:

AnnotationMetadata MethodMetadata


五、BeanDefinition 的“生命周期”(非常关键)

1️⃣ 解析(XML / 注解 / API) 2️⃣ 构建 Raw BeanDefinition 3️⃣ 注册到 BeanFactory 4️⃣ 合并成 RootBeanDefinition 5️⃣ 创建 Bean 实例 6️⃣ 执行 BeanPostProcessor

📌你现在操作的是第 2~3 步


六、Raw / Merged BeanDefinition(再巩固一次)

阶段类型
注册前Raw BeanDefinition
getMergedBeanDefinitionRootBeanDefinition
Bean 创建RootBeanDefinition

你用的:

getRawBeanDefinition()

✔ 正确
✔ 安全
✔ 官方推荐做法


七、BeanDefinition 和 BeanFactory 的关系

BeanFactory 是“仓库”,BeanDefinition 是“商品说明书”

DefaultListableBeanFactory ├── Map<String, BeanDefinition> beanDefinitionMap ├── Map<String, Object> singletonObjects └── Map<String, RootBeanDefinition> mergedBeanDefinitions


八、BeanDefinition 的“高级能力”

1️⃣ BeanDefinition + Supplier(你正在用)

genericBeanDefinition(clazz, () -> instance)

✔ 绕过反射
✔ 直接返回对象
✔ 常用于动态 Bean / SDK / Client


2️⃣ FactoryBean vs BeanDefinition

对比FactoryBeanBeanDefinition
定义层运行期配置期
作用生产 Bean描述 Bean
使用场景复杂构造元数据描述

3️⃣ 动态修改 BeanDefinition

你现在的代码就是典型用法:

  • 注册

  • 移除

  • 覆盖

  • 替换

📌 Spring Boot 自动装配大量使用这套机制


九、和 BeanDefinition 强相关的“核心扩展点”

扩展点操作对象
BeanDefinitionRegistryPostProcessorBeanDefinition
BeanFactoryPostProcessorBeanDefinition
BeanPostProcessorBean 实例
InstantiationAwareBeanPostProcessor构造阶段

📌BeanDefinition 是所有扩展的起点


十、面试 / 架构一句话总结(直接用)

Spring IOC 的核心不是 Bean,而是 BeanDefinition。所有配置方式最终都会转化为 BeanDefinition,Spring 在创建 Bean 前会对 BeanDefinition 做合并、解析、增强,最终用 RootBeanDefinition 创建 Bean 实例。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 17:35:46

护网怎么做,护网前、护网中,护网后,总共60道工序,一道一道

【必收藏】网络安全护网全攻略&#xff1a;从准备到实战的零基础指南 本文详细介绍了网络安全"护网行动"的全流程指南&#xff0c;涵盖前期资产梳理、风险排查与团队建设&#xff0c;实战中的724小时监控、快速响应与应急处置&#xff0c;以及事后复盘整改与经验沉淀…

作者头像 李华
网站建设 2026/6/15 22:18:43

远程管理效能革命:Quasar架构下的智能传输体系重构

远程管理效能革命&#xff1a;Quasar架构下的智能传输体系重构 【免费下载链接】Quasar Remote Administration Tool for Windows 项目地址: https://gitcode.com/gh_mirrors/qua/Quasar 在数字化转型浪潮中&#xff0c;远程管理工具的性能瓶颈已成为制约企业IT效率的关…

作者头像 李华
网站建设 2026/6/23 17:54:52

Happy LLM:Github爆火!手把手教你从0手搓个大模型!

最近刷 GitHub 时刷到一个挺有意思的开源项目&#xff1a;Happy LLM它在GitHub上十分火热&#xff0c;已经收获13.8k⭐。 它是 Datawhale 出品的&#xff0c;教你从0搭建一个215M的大模型&#xff01;这套 LLM 学习材料啊&#xff0c;是从自然语言处理的基础知识开始讲的。之后…

作者头像 李华
网站建设 2026/6/23 17:55:07

SSM线上学习系统8e88w(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面

系统程序文件列表系统项目功能&#xff1a;学院,课程,教师,学生,课程信息,学习记录SSM线上学习系统开题报告一、课题背景与意义1.1 课题背景在“互联网教育”政策推动下&#xff0c;线上学习已成为教育模式的重要组成部分。然而当前部分线上学习工具存在功能单一、数据割裂等问…

作者头像 李华
网站建设 2026/6/23 17:47:21

深度解析:MindsDB与ChromaDB向量数据库集成的高效实战指南

深度解析&#xff1a;MindsDB与ChromaDB向量数据库集成的高效实战指南 【免费下载链接】mindsdb mindsdb/mindsdb: 是一个基于 SQLite 数据库的分布式数据库管理系统&#xff0c;它支持多种数据存储方式&#xff0c;包括 SQL 和 NoSQL。适合用于构建分布式数据库管理系统&#…

作者头像 李华
网站建设 2026/6/23 17:47:20

32、深入了解Samba与Linux安全策略

深入了解Samba与Linux安全策略 在当今复杂的网络环境中,无论是实现不同操作系统间的资源共享,还是保障系统的安全性,都是至关重要的任务。Samba作为实现Linux与Windows系统资源共享的关键工具,以及Linux系统安全策略的制定与实施,对于系统的稳定运行和数据安全起着举足轻…

作者头像 李华