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

SpringBoot面试题04-BeanDefinition

一、什么是 BeanDefinition?

BeanDefinition 是 Spring 用来“描述一个 Bean 的信息的对象”。

换句话说:

BeanDefinition = Bean 的“说明书 / 菜谱 / 配置单”。

不是 Bean 本身,而是:

  • 记录着这个 Bean 是什么

  • 怎么创建

  • 怎么注入依赖

  • 生命周期怎么管理


二、BeanDefinition 记录了什么?

以下信息全部保存在 BeanDefinition 里:

信息示例作用
Bean的类型UserService.class要 new 谁
构造参数new UserService(orderService)创建时需要谁
作用域singleton / prototype单例还是每次 new
是否懒加载lazy-init是否启动时就创建
是否需要自动注入@AutowiredDI 自动注入依赖
是否有 AOP 代理动态代理信息创建 Bean 时包装代理
初始化方法afterPropertiesSet()Bean 初始化回调

一句话:BeanDefinition 记录了“怎么创建 Bean”。

2-1、常用方法

2-2、继承关系

测试:


三、BeanDefinition 的地位

Spring 创建 Bean 的流程是:

① 扫描类路径
② 解析注解(@Component、@Service、@Bean 等)
③ 生成 BeanDefinition(记录 Bean 配置信息)
④ 把 BeanDefinition 缓存到 BeanFactory
⑤ 在需要时根据 BeanDefinition 实例化 Bean

也就是:

先保存定义 → 再按定义创建

所以 BeanDefinition 是 Spring IoC 的基础


3-1、直观流程图

ClassPath + 注解扫描↓BeanDefinition(记录信息)↓  放进
DefaultListableBeanFactory(Bean 工厂)↓  按说明书创建实例化 Bean(new 对象 + 注入依赖 + AOP)

BeanDefinition 是连接“类 → Bean”的桥梁。


3-2、为什么不直接 new?还要 BeanDefinition 干啥?

因为 Spring 要实现:

功能为什么需要 BeanDefinition
自动装配需要提前解析依赖关系
AOP 代理需要决定是否要增强 Bean
循环依赖处理需要提前知道谁依赖谁
作用域管理需要知道是否多例 or 单例
懒加载需要记录什么时候创建 Bean

如果直接 new,将无法实现这些强大特性

所以:

BeanDefinition = Spring 能够比“直接 new”更强大的关键所在。


四、总结

BeanDefinition = Bean 的说明书
Spring 先读取说明书(BeanDefinition)
再根据说明书创建 Bean(对象)
http://www.dtcms.com/a/586222.html

相关文章:

  • 电脑网站怎么创建到桌面上讲课app怎么制作
  • 东莞网站建设怎么收费wordpress中文分享插件下载
  • CosyVoice 2 部署加速推理模型(Ubuntu 24.04)
  • 【C++初阶】string类的模拟实现
  • 学做网站根学ps有前途吗网站建设费 科目
  • 铁岭做网站包括哪些微信运营工具
  • GUI自动化测试--自动化简单示例
  • 深圳住房建设厅网站首页seop
  • U盾(USB-KEY)的物理组成原理
  • C4D纽扣嵌条和拉链工具详解:服装建模的细节利器
  • 访问中国建设银行官方网站学校网站建设会议讲话稿
  • 沧县网站制作价格网页设计尺寸多大
  • Step7 组态 PC Station 与 CM1243-5 基于 Profibus 的 S7 通信
  • wordpress主题那个好河源网站页面优化ppt
  • 【信号处理】(高斯分布)最大熵定理
  • 网站备案号查电话号码php建站程序
  • 遵化建设局网站近期新闻热点大事件
  • 教育类集群网站建设python做网站优势
  • 未成年人思想道德建设网站招标网上的项目好中标吗
  • 【C++】封装哈希桶实现unordered_map和unordered_set
  • 多语言网站建设应注意哪些事项做沙盘实训在哪个网站做
  • 沈阳专业制作网站东莞家具网站建设
  • 制造业营销外贸网站建设手机网站建设 技术规范
  • C# var 关键字详解:从入门到精通
  • 使用 SQLAlchemy 连接数据库:从基础到最佳实践
  • 如何使用Profiler进行内存分析?
  • 12306网站开发携程网站建设计划管理与进度控制
  • 淮南电商网站建设价格新校区建设网站管理规定
  • 进入新岗位的第一课——潜龙勿用
  • DeepSeek辅助编写转换DuckDB explain_analyze_json 格式执行计划到postgresql_plan 的程序