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(对象)
相关推荐
大学生资源网16 分钟前
基于springboot的万亩助农网站的设计与实现源代码(源码+文档)
java·spring boot·后端·mysql·毕业设计·源码
q_191328469538 分钟前
基于SpringBoot2+Vue2的诗词文化传播平台
vue.js·spring boot·mysql·程序员·计算机毕业设计
五阿哥永琪1 小时前
RedisTemplate、StringRedisTemplate、RedisIndexedSessionRepository之间的区别?
spring boot
计算机毕设指导62 小时前
基于微信小程序的鸟博士系统【源码文末联系】
java·spring boot·mysql·微信小程序·小程序·tomcat·maven
QQ_21696290963 小时前
Spring Boot大学生社团管理平台 【部署教程+可完整运行源码+数据库】
java·数据库·spring boot·微信小程序
是席木木啊3 小时前
Spring Boot 中 @Async 与 @Transactional 结合使用全解析:避坑指南
数据库·spring boot·oracle
阿拉斯攀登3 小时前
自定义 Spring Boot 自动配置
java·spring boot
appearappear4 小时前
Mac 上重新安装了Cursor 2.2.30,重新配置 springboot 过程记录
java·spring boot·后端
鹿角片ljp5 小时前
Spring Boot Web入门:从零开始构建web程序
前端·spring boot·后端
程序员阿鹏5 小时前
SpringBoot自动装配原理
java·开发语言·spring boot·后端·spring·tomcat·maven