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

【Spring IoC 核心实现类详解:DefaultListableBeanFactory】

Spring IoC 核心实现类详解(源码+原理)

作为 Spring 的灵魂,IoC 容器(Inversion of Control)是整个框架的核心。
那么 IoC 的“心脏”到底是哪个类?它是怎么管理和装配 Bean 的?本文将从源码层面深入剖析。


一、IoC 是什么?

IoC(控制反转)是 Spring 用来管理对象依赖关系的一种机制。
简单说,对象不是自己去 new 依赖,而是由容器帮它创建和注入

在 Spring 中,IoC 的实现依赖于 BeanFactoryApplicationContext 两大家族的容器接口。


二、IoC 核心实现类

如果追源码,你会发现 IoC 容器的最终核心实现是:

DefaultListableBeanFactory

它是 Spring 中最通用、功能最完整的 BeanFactory 实现类,几乎所有 ApplicationContext 都会委托它完成 Bean 的注册与创建。


1. 继承体系

DefaultListableBeanFactory 的类层次结构大致如下:
在这里插入图片描述

2. 核心职责

DefaultListableBeanFactory 主要做了以下几件事:

(1)保存 BeanDefinition
  • 内部维护一个 Map<String, BeanDefinition>(beanDefinitionMap)
  • 所有 Bean 的定义信息(类名、作用域、依赖等)都存储在这里
private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>();
(2)注册 BeanDefinition

通过 registerBeanDefinition(beanName, beanDefinition) 方法注册。

public void registerBeanDefinition(String beanName, BeanDefinition beanDefinition) {this.beanDefinitionMap.put(beanName, beanDefinition);
}
(3)根据 BeanDefinition 创建 Bean
  • 支持单例、多例、懒加载、FactoryBean 等
  • 会调用 BeanPostProcessor 执行初始化前后回调
  • 支持自动注入(byName、byType、构造器)
(4)依赖解析(Autowire)

在 Bean 创建过程中解析依赖,执行自动装配逻辑(@Autowired、@Resource)。

(5)根据类型或者名称获取bean
(6)解决三级缓存依赖问题

继承了 DefaultSingletonBeanRegistry ,解决了循环依赖问题的

(7)生命周期管理

负责调用 InitializingBeanDisposableBean 等接口方法。


三、ApplicationContextFactory与 DefaultListableBeanFactory 的关系

ApplicationContextFactory 是更高级别的 IoC 容器创建接口,真正的来说应该是对应的应用上下文的创建工厂,主要提供:

  • 上下文应用类型的创建。

ApplicationContextFactory创建出来的ApplicationContext内部都会持有一个 DefaultListableBeanFactory,实际的 Bean 管理还是由 DefaultListableBeanFactory 完成。


四、核心运行流程(简化)

AnnotationConfigApplicationContext 为例:

  1. 创建容器
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
  1. 注册配置类
    调用 DefaultListableBeanFactory.registerBeanDefinition()AppConfig 注册进去。

  2. 解析配置类
    通过 ConfigurationClassPostProcessor 扫描 @Bean、@Component 等。

  3. 注册更多 BeanDefinition
    扫描到的类也会被注册进 DefaultListableBeanFactory

  4. 实例化 Bean
    调用 preInstantiateSingletons() → 根据 BeanDefinition 创建单例 Bean。

  5. 依赖注入 + 初始化回调
    执行自动注入、调用初始化方法、BeanPostProcessor 回调等。


五、总结

  • 核心类DefaultListableBeanFactory
  • 职责:保存 BeanDefinition、注册 BeanDefinition、创建 Bean、依赖注入、生命周期管理
  • 关系ApplicationContext 只是更高级的外观模式,底层真正管理 Bean 的还是 DefaultListableBeanFactory

六、图解(IoC 核心结构)

ApplicationContext├── 环境管理(Environment)├── 国际化(MessageSource)├── 事件发布(ApplicationEventPublisher)└── DefaultListableBeanFactory ← 真正的 IoC 容器├── BeanDefinitionMap(存储 Bean 定义)├── 创建 Bean├── 依赖注入└── 生命周期管理

💡 一句话总结

在 Spring IoC 中,DefaultListableBeanFactory 就是“发动机”,
ApplicationContext 则是“外壳 + 控制台”,
所有 Bean 的注册、创建和装配,最终都由 DefaultListableBeanFactory 来完成。

http://www.lryc.cn/news/615933.html

相关文章:

  • 从策略梯度到 PPO
  • Linux权限管理终极指南(用户身份与文件权限
  • Python中的 __name__
  • 计算机视觉(CV)——pytorch张量基本使用
  • imx6ull-驱动开发篇17——linux原子操作实验
  • docker等基础工具使用
  • 个人笔记Mybatis2
  • 第一章 概述
  • 快速了解DBSCAN算法
  • reinterpret_cast and static cast
  • Docker实战:为项目打造即开即用的宝塔LNMP环境
  • redis集群-docker环境
  • 【从源码角度深度理解 CPython 的垃圾回收机制】:第2课循环引用:标记清除-分代回收
  • 机器学习线性归回实战(单因子和多音字分别建立预测房价模型)
  • 一个基于 Next.js 和 Puppeteer 的 Markdown 转图片服务,支持 Docker 部署和 API 集成
  • Node.js面试题及详细答案120题(01-15) -- 基础概念篇
  • python | numpy小记(十):理解 NumPy 中的 `np.random.multinomial`(进阶)
  • Stlink识别不到-安装驱动
  • 医防融合中心-智慧化慢病全程管理医疗AI系统开发(下)
  • 整数规划-分支定界
  • Docker Compose 部署高可用 MongoDB 副本集集群(含 Keepalived + HAProxy 负载均衡)
  • AI编程插件对比分析:CodeRider、GitHub Copilot及其他
  • 给AI装上“翻译聚光灯”:注意力机制的机器翻译革命
  • 【精彩回顾·成都】成都 User Group×柴火创客空间:开源硬件驱动 AI 与云的创新实践!
  • 打卡day34
  • openpnp - 顶部相机如果超过6.5米影响通讯质量,可以加USB3.0信号放大器延长线
  • Spark执行计划与UI分析
  • AutoCAD 2026 的主要功能
  • 变量详解:创建初始化与内存管理
  • lesson34:深入理解Python线程:从基础到实战优化