什么是BeanDefinition
- 简单说就是对Bean信息的定义。
- 描述一个bean的全部信息,比如他的class类型、Bean的作用域、是否懒加载...
- spring中每一个被扫描到的bean都会生成一个BeanDefinition。
- BeanDefinition的主要作用是为了在只解析一次类的情况下,最大程度的拿到这类的信息。防止重复解析导致效率变低。
- spring采用ASM(字节码解析的工具)技术去得到BeanDefinition。
BeanDefinition中的常用属性
- beanClass:表示Bean类型,未加载类的时候存放Bean的名字,加载类后存放Bean的class信息。
- scope:表示Bean的作用域,一般值为单例或者原型。
- lazyInit:表示Bean是否是懒加载。
- initMethodName:Bean初始化需要执行的方法。
- destroyMethodName:Bean销毁时要执行的方法。
- factoryBeanName:创建当前Bean的工厂。
几种Bean的定义方式
- xml中配置:
- @Bean
- @Component(@Service,@Controller)
- 编程式定义Bean
AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition().getBeanDefinition();
beanDefinition.setBeanClass(Test.class);
context.registerBeanDefinition("test", beanDefinition);
BeanDefinition是如何存放的?
- private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256);
- 当Bean注册完成后,会在spring容器中把扫描到的beanDefinition存放到beanDefinitionMap中,方便后续的使用。
BeanDefinition的常见读取器
- AnnotatedBeanDefinitionReader:解析类上的注解,包含某些注解的时候会成为Bean。
- XmlBeanDefinitionReader:可以解析xml文件中的标签。
- ClassPathBeanDefinitionScanner:扫描包路径的读取器。
结束语
- 获取更多本文的前置知识文章,以及新的有价值的文章,让我们一起成为架构师!
- 关注公众号,可以让你对MySQL、并发编程、spring源码有深入的了解!
- 关注公众号,后续持续高效的学习JVM!
- 这个公众号,无广告!!!每日更新!!!

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)