spring的beanDefinition是什么

本文探讨了Spring框架中的bean、beanDefinition和class之间的关系。beanDefinition是bean的描述信息,包含了如是否是primary、是否懒加载等属性。Spring通过beanDefinition来创建和初始化bean。在自动扫描过程中,class被转化为beanDefinition。Spring初始化bean时,根据beanDefinition的属性进行判断。文章还提及了beanDefinition在自动注入模型判断中的作用,并指出可以通过实现ImportBeanDefinitionRegistrar接口修改beanDefinition属性,实现对Spring的扩展。
摘要由CSDN通过智能技术生成

在spring源码中,会涉及到bean和beanDefinition这两个概念,接下来,说下什么是bean,什么是beanDefinition

class、beanDefinition、bean三者的关系

class是我们自己写的类,bean是spring经过自己的一系列处理之后。生成的,我们可以认为bean是spring容器中真正的成品,beanDefinition是对bean的一个描述信息,spring会根据beanDefinition去生成bean,所以三者的关系是:
spring首先将class转换为beanDefinition,然后再将beanDefinition转换为bean
我们通常说,spring可以通过自动扫描,完成bean的实例化,其实这里的自动扫描,是把class文件,通过扫描,转换为beanDefinition

beanDefinition的定义

我们可以看下beanDefinition的定义
在这里插入图片描述
可以看到,一个beanDefinition中,定义了N多个属性和方法,比如:是否是primary、是否是懒加载、dependOn属性、autowireMode自动注入属性等

所以,我们可以简单的认为,spring在扫描class的时候,会根据class文件中的注解等信息,给beanDefinition对象赋值,所以,beanDefinition是对一个类的描述
那spring在真正去初始化、实例化一个bean的时候,直接根据beanDefinition去初始化就可以,比如,在判断这个bean是根据类型注入,还是根据名字注入的时候,就直接判断autowireMode的属性值即可

spring根据beanDefinition进行初始化

org.springframework.beans.factory.support.DefaultListableBeanFactory#preInstantiateSingletons

@Override
public void preInstantiateSingletons() throws BeansException {
   
  if (logger.isDebugEnabled()) {
   
    logger.debug("Pre-instantiating singletons in " + this);
  }

  // Iterate over a copy to allow for init methods which in turn register new bean definitions.
  // While this may not be part of the regular factory bootstrap, it does otherwise work fine.
  // 1.获取到所有的beanDefinitionName
  List<String> beanNames = new ArrayList<>(this.beanDefinitionNames);

  // Trigger initialization of all non-lazy singleton beans...
  // 2.依次遍历所有的beanDefinitionName,进行初始化
  for (String beanName : beanNames
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值