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

SpringBoot面试题03-BeanFactory

一、BeanFactory 是什么?

BeanFactory 是 Spring 最核心的容器

它就像一个 “对象工厂”,负责:

  • 创建对象(也就是 Bean)

  • 管理对象

  • 给对象进行依赖注入

你以后听到的 IoC(控制反转),本质就是 BeanFactory 在负责管对象,而不是你 new。



流程:

  1. Spring 启动 → 先把所有 Bean 的配置信息记到菜单里(BeanDefinition)

  2. 真正需要用某个 Bean 的时候 → 由 BeanFactory 创建对象并交给你

你不再 new,由 BeanFactory 来 new

这就是 IoC。


二、为什么它叫 Factory(工厂)

因为它做两件事:

方法含义
存 Bean把对象保存好
取 Bean调用 getBean() 拿对象

实际核心方法:

Object getBean(String name);

你只要要,它就能给你。


2-1、简单代码理解

如果你自己不用 Spring,你会这样写:

UserService userService = new UserService();

但是用了 Spring:

ApplicationContext context = ...
UserService userService = context.getBean(UserService.class);

这里 getBean() 就是 BeanFactory 的本质能力

差别就在:谁负责 new?你还是Spring?
Spring 负责 → 这就叫 IoC。


三、BeanFactory 和 ApplicationContext 的关系

容器包含谁谁更高级?
BeanFactory负责 创建和管理 Bean基础能力
ApplicationContext= BeanFactory + 额外功能✅ 更高级

ApplicationContext 比 BeanFactory 多:

✅ AOP 自动代理
✅ 国际化(i18n)
✅ 事件发布 / 监听机制
✅ 自动装配
✅ Web 环境支持

所以我们平常写:

@SpringBootApplication
public class App {}

默认用的是 ApplicationContext,因为它功能更完整

但底层它还是用 BeanFactory 来创建 Bean。


总结

BeanFactory 是 Spring 的对象管理工厂,负责创建、存放和提供 Bean,是 Spring IoC 的核心。

ApplicationContext 是在 BeanFactory 的基础上增强了更多功能。

“Bean 定义已加载,但 Bean 还未实例化”

= BeanFactory 已经记录要创建哪些对象,但还没 new。


四、BeanFactory的常用方法

4-1、常用方法

4-2、两个常用的实现类

1、DefaultListableBeanFactory

DefaultListableBeanFactory = Spring 默认使用的 BeanFactory 实现类,是 Spring IoC 容器真正干活的“底层发动机”

换句话说:

  • BeanFactory 是概念 / 接口(定义“能做什么”)

  • DefaultListableBeanFactory 是具体实现(“真正做事情的类”)

名称是什么举例说明
BeanFactory接口菜单说“要做菜”
ApplicationContext高级容器(用来提供更多功能)餐厅前台负责接单、上菜、服务
DefaultListableBeanFactoryApplicationContext 里面真正的 底层 Bean 工厂厨房真正负责炒菜的人 

所以真正 “new Bean、装配依赖、做 AOP 代理” 的,是 DefaultListableBeanFactory。

DefaultListableBeanFactory做三件核心大事
能力解释为什么重要
① 存 Bean 定义把所有 Bean 的信息存起来决定 Spring 要创建哪些 Bean
② 创建和管理 Bean真正执行 new、依赖注入、生命周期回调就是 IoC 的核心功能
③ 负责依赖注入(DI)谁依赖谁,自动装配没它,你就只能自己手写 new 和注入

没有 DefaultListableBeanFactory,Spring 就没办法自动 new 对象,也没办法做依赖注入。

真实结构:

ApplicationContext↓ 调用
DefaultListableBeanFactory (真正执行创建 Bean)↓
AbstractAutowireCapableBeanFactory (负责依赖注入)↓
InstantiationStrategy (负责构造对象,用反射或 CGLIB)

也就是说:

事情真正执行者
加载 Bean 定义DefaultListableBeanFactory
实例化 Bean(反射 new)InstantiationStrategy
给 Bean 注入属性AbstractAutowireCapableBeanFactory
AOP 代理BeanPostProcessor

最顶层的总调度者就是 DefaultListableBeanFactory


2、AnnotationConfigServletWebServerApplicationContext

看起来名字很长,但它其实就做 一件事

它是 Spring Boot 在 Web 项目真正使用的 ApplicationContext(应用上下文/容器)。


先对比你已经理解的概念

名称角色地位
BeanFactory创造 Bean 的底层工厂最底层
DefaultListableBeanFactoryBeanFactory 的默认实现真正干活
ApplicationContext包装 + 提供更多功能的容器高层入口
AnnotationConfigApplicationContext注解方式加载 Bean 的应用上下文(非 Web 环境)桌面/命令行项目用
AnnotationConfigServletWebServerApplicationContextWeb 环境用的 ApplicationContext(Spring Boot 默认用它)现在的这个

1)一句话说明它的重要性

AnnotationConfigServletWebServerApplicationContext = Spring Boot Web 应用的“总大脑”。

只要你是:

@SpringBootApplication
public class MyApp {public static void main(String[] args){SpringApplication.run(MyApp.class, args);}
}

那么 Spring Boot 就会用它作为容器


2)它比普通 ApplicationContext 多了什么?
能力是否具备?描述
加载 @Configuration / @ComponentScan解析注解注册 Bean
支持依赖注入 IoC和普通 ApplicationContext 一样
管理容器生命周期事件Ready、Start、Failed 事件
启动 Web 服务器(Tomcat/Jetty/Undertow)✅✅✅核心!
注册 DispatcherServlet (Spring MVC)支持 @Controller/@RestController 运行

所以 没有它,Spring Boot Web 就跑不起来。


3)总结
容器适用场景举例
AnnotationConfigApplicationContext非 Web 项目消息消费者、小工具脚本、定时任务程序
AnnotationConfigServletWebServerApplicationContext✅ Web 项目(现在写的多数都是这个)API 服务、后台系统、前后端分离服务

4)它和 DefaultListableBeanFactory 的关系是什么?

结构如下:

AnnotationConfigServletWebServerApplicationContext↓ 内部封装/持有
DefaultListableBeanFactory↓ 调用
创建 Bean、依赖注入、AOP处理、生命周期管理

也就是:

它是“外壳 + 调度者”,真正干活的仍然是 DefaultListableBeanFactory。


最终,你只要记住这句话:
AnnotationConfigServletWebServerApplicationContext
= Spring Boot Web 项目的 ApplicationContext
= 会自动启动 Web 服务器并加载所有 Bean

它是 Spring Boot Web 应用启动的“大脑 + 总指挥”。


五、小结

http://www.dtcms.com/a/586597.html

相关文章:

  • 单位做网站需要多少钱wordpress进不去仪表盘
  • 滨州网站建设模板建设宁阳网站seo推广
  • 免费咨询律师在线微信嘉兴网站排名优化公司
  • 长兴住房和城乡建设局网站昆明网络公司收费标准
  • phpcmsv9网站建设入门教程禅城网站建设公司
  • 2025年市场上主流的22种物联网传感器类型
  • Java Stream流完全指南:从入门到精通
  • Optuna超参数调优图例解读之超参数重要性图
  • 怎么和网站建设公司签合同建一个自己用的网站要多少钱
  • 数字通信入门
  • computed计算属性
  • 无锡做网站设计ui培训心得
  • 游戏“二开”:在巨人的肩膀上创造新世界
  • 网站 用户体验的重要性wordpress有多个页脚
  • 网站开发与数据库高端网站建设与发展
  • PyQt5 QMultiMap完全指南:深入理解Qt的多值映射容器
  • 公司想制作网站黄埔做网站
  • 大功率绿电制氢电源装置研究
  • 做电影网站用什么程序个人做免费网页
  • 网站开发两端对齐底行左对齐安庆做网站电话
  • linux wordpress配置已收录的网站不好优化
  • 怎么制作自己的网页网站首页直播视频怎么下载
  • 网站当电话线成都政务网站建设
  • 定制做网站报价个人网站官网
  • JavaEE初阶 --文件操作和IO
  • 虚拟机wordpress建站江西省建设工程有限公司
  • 如何免费注册自己的网站织梦网站怎么做优化
  • 软考高级考试过程
  • 优质的低价网站建设网站类型大全
  • 深圳设计网站培训学校网站接入地查询