Springbean对象加载

  1. Spring如何将创建的对象放到IoC容器中?

先创建容器,先创建的是ClassPathXmlApplicationContext,直到他继承链的AbstractRefreshableApplicationContext类中有一个DefaultListableBeanFactory对象,他才是真正的容器。接下来解释Spring如何将创建的对象放到IoC容器中。

通过ResourceLoader读出来的对象用BeanRegister利用反射机制将这个对象拆分成一个BeanDefinition(对象定义)(BeanRegister是从DefaultResourceLoader中读到的这个对象的),然后再将这个BeanDefinition植入到DefaultListableBeanFatory中(这个容器来承载BeanRegister创建出来DefaultListableBeanFactory对象,他才是真正的容器DefaultListableBeanFactory对象)。

ClassPathXmlApplicationContext的继承链中有一些关键信息,即:AbstractRefreshableApplicationContext中一个DefaultListableBeanFactory,这个对象和ApplicationContext强耦合,这个对象就是容器。而ApplicationContext是容器的操作类。(ApplicationContext和BeanFactory没有继承关系)

这个DefaultListableBeanFatory是写在AbstractRefreshableApplicationContext中的,所以他是归AbstractRefreshableApplicationContext管理的。上面就说清楚了容器在什么地方了(总结:容器就在ApplicationContext的继承链中的AbstractRefreshableBeanFactory中,它里面有五个ConCurrentHashMap,这就是SpringIoC容器了,所有创建的对象都放在BeanDefinition映射表中

在AbstractXMLApplicationContext中,(ClassPathXMLApplicationContext的直接父类),存在一个loadBeanDefinition()方法,该方法中,加入了XmlBeanDefinitionReader对象,这个对象中存在一个叫做doLoadBeanDefinitions方法,这个方法可以调用了BeanDefinitionRegistry中的getRegistry方法,将对象的定义读取并保存在继承链中的DefaultListableBeanFactory中,操作过程使用的是父类定义操作,子类调用或用子类定义实现过程来进行内容植入。

总结:

先描述清楚容器在哪里(在ApplicationContext的继承链中有一个DefaultListableBeanFactory对象,它里面有五个ConcurrentHashMap,而真正的bean对象会保存在一个叫做BeanDefinitionMap的映射表中)

怎么放到那个里面的呢?

在ClassPathXMLApplicationContext的直接父类里面有一个loadBeanDefinition()方法,这个方法里面创建了XmlBeanDefinitionReader对象。同时ClassPathXMLApplicationContext又是ResourceLoader的子类。所以ClassPathXMLApplicationContext的直接父类就有同时将配置文件读取到自己对象中的能力(该功能由ResourceLoader提供),而且又有一个XmlBeanDefinitionReader对象(可以将读取出的配置文件的类型的定义映射成一个BeanDefinition),注册成BeanDefinition的能力是由XmlBeanDefinitionReader提供的(将读取到的一条一条bean标签翻译成BeanDefinition)。

XmlBeanDefinitionReader这就是register(注册器),容器就是DefaultListableBeanFactory,这个容器在继承链中放在(AbstractRefreshableApplicationContext)

如何将配置文件读取出:由DefaultResourceLoader提供,在子类中调用的。


怎样将对象创建出来并放到容器中:

第一:先通过资源文件加载器(ResourceLoader)加载资源,他提供找到配置文件,然后把对象翻译到容器对象的功能,由他的实现子类调

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值