Spring核心模块解析—BeanDifinition。

前言

Spring中的BeanDifinition在Bean的实例化流程中占有着非常重要的角色,如果你不了解BeanDifinition的话,面试或者学习Bean的生命周期的话,如同空中楼阁,应付面试可以,如果你想真的成体系化,这部分内容推荐你仔细阅读。
本文结合自己平时笔记和大牛博客整理得出,例子都是自己手敲验证过的,放心阅读。

什么是BeanDefinition?

这个概念在Spring官网的文档里面介绍的很清楚,参考别人的大致说一下:
SpringIOC容器管理一个或多个Bean,这些Bean通过我们提供给容器配置的元数据被创建出来(比如,在xml的定义),在容器中,这些Bean的定义用BeanDefinition对象来表示,包含以下元数据:

  • 全限定类名,通过是Bean的实际实现类;
  • Bean行为配置元素,它们说明Bean在容器中的行为(作用域,生命周期回调等);
  • Bean执行工作所需要的其他Bean的引用;
  • 其他配置信息,比如(管理连接池的bean中,限制池的大小或者使用的连接数量);
    大概总结一下,BeanDefinition可以看做是Bean的一个定义或者是一个半成品。

为什么要有BeanDefinition?

为什么要这样去设计呢?还要多此一举再添加一个中间状态,直接把Bean创建出来不就好了吗?
举个不同方式创建Bean的例子就明白为什么BeanDefinition是有必要存在的:

  • 普普通通创建一个Java bean:
    在这里插入图片描述
  • Spring创建Bean:
    在这里插入图片描述
    好的,如果你是第一次看到这个spring创建bean的这个图估计有点蒙,没关系。
    下面我们了解一下在Spring中Bean的实例化流程(这里只是简单介绍,后面会开专辑说),这里我们拿xml配置为元数据进行分析
  • Spring容器在进行初始化时,会将XML配置(或者注解)的信息封装成一个BeanDefinition。
  • 所有的BeanDefinition存储到一个名为beanDefinitionMap的Map集合中去。
  • Spring框架再对Map进行遍历,使用反射创建Bean实例对象,创建好的Bean对象存储在一个名为SingletonObjects的Map集合中。
  • 当调用getBean方法时则最终从该Map集合中取出Bean实例对象返回。

这里我们写一个demo来验证看一下:
1.下图是项目的目录
在这里插入图片描述
2.我们在xml文件里写了两个bean:
在这里插入图片描述

3.写一个测试test,debug看一下,我:
在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值