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 是否启动时就创建
是否需要自动注入 @Autowired DI 自动注入依赖
是否有 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(对象)
相关推荐
wxin_VXbishe17 分钟前
C#(asp.net)学员竞赛信息管理系统-计算机毕业设计源码28790
java·vue.js·spring boot·spring·django·c#·php
森焱森24 分钟前
详解 Spring Boot、Flask、Nginx、Redis、MySQL 的关系与协作
spring boot·redis·python·nginx·flask
Coder_Boy_1 小时前
Deeplearning4j+ Spring Boot 电商用户复购预测案例
java·人工智能·spring boot·后端·spring
金牌归来发现妻女流落街头1 小时前
【Springboot基础开发】
java·spring boot·后端
是梦终空2 小时前
计算机毕业设计264—基于Springboot+Vue3+协同过滤的房屋租赁管理系统(源代码+数据库+万字论文+设计文档)
spring boot·毕业设计·vue3·课程设计·毕业论文·协同过滤·房屋租赁管理系统
qq_297574672 小时前
【实战】POI 实现 Excel 多级表头导出(含合并单元格完整方案)
java·spring boot·后端·excel
风流倜傥唐伯虎11 小时前
Spring Boot Jar包生产级启停脚本
java·运维·spring boot
fuquxiaoguang12 小时前
深入浅出:使用MDC构建SpringBoot全链路请求追踪系统
java·spring boot·后端·调用链分析
毕设源码_廖学姐13 小时前
计算机毕业设计springboot招聘系统网站 基于SpringBoot的在线人才对接平台 SpringBoot驱动的智能求职与招聘服务网
spring boot·后端·课程设计
顾北1213 小时前
MCP服务端开发:图片搜索助力旅游计划
java·spring boot·dubbo