You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring技术问询:BeanFactory持有Bean定义,哪个类存实际Bean实例与容器类?

关于Spring BeanFactory的两个核心问题解答

让我来拆解这两个问题,帮你理清Spring容器的核心逻辑:

问题1:哪个类负责持有实际的Bean实例?

首先要明确:BeanFactory的具体实现类(而非接口本身)会同时持有Bean定义和实例。

  • 比如最常用的DefaultListableBeanFactory,它既是BeanDefinitionRegistry的实现(负责存储Bean定义),也内置了缓存结构(比如singletonObjects这个Map)来存储已经初始化完成的单例Bean实例。
  • 至于ApplicationContext(它本身是BeanFactory的子接口),它并不直接持有Bean实例,而是委托内部的BeanFactory实现类来管理。比如AnnotationConfigApplicationContext、ClassPathXmlApplicationContext这些常用的ApplicationContext实现,内部都会封装一个DefaultListableBeanFactory,所有的Bean实例存储、查找操作最终都是交给这个内部的bean工厂来完成的。

简单说:实际持有Bean实例的是DefaultListableBeanFactory这类具体的BeanFactory实现类,ApplicationContext只是在它之上做了扩展(比如添加事件发布、资源加载等功能)。

问题2:BeanFactory根接口对应的具体容器类是哪个?

BeanFactory作为Spring容器的根接口,它有多个实现类,但最核心、最常用的具体实现是DefaultListableBeanFactory:

  • 它是Spring容器的"核心引擎",几乎所有的ApplicationContext实现都会把它作为底层的bean管理容器。
  • 早期还有XmlBeanFactory这类实现,但现在已经被标记为过时,推荐使用DefaultListableBeanFactory或者基于它的ApplicationContext实现。
  • 如果你需要手动创建一个轻量级的Spring容器,直接实例化DefaultListableBeanFactory并注册Bean定义是最直接的方式。

内容的提问来源于stack exchange,提问作者saralor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:22:30