spring 源码之 IOC 容器的初始化过程

  学习 spring源码真的是一件痛并快乐的刺激的事。昨天听了别人的视频,任然是一头雾水,层次不一样,就不太容易接受。直接打开spring源码,断点调试,有点难度。于是又捧起书,《深入理解spring技术内幕》,先学习一些里边的概念,设计模式。再回头自己撸源码比较好一点。

  展开学习,和记录。我尽量少用术语,用故事,或者白话,来讲出来理解的内容。

# # spring 的核心内容就是 IOC

  IOC 总结成一句话,它的作用就是用来帮我们维护对象之间的关系。所谓的控制反转反转的就是对象的创建。不用spring 我们创建一个对象通常是 new ,或者使用反射,克隆等,来实现。 而在使用spring 以后,spring 替你来掌握对象的实例化,来帮你维护这些对象之间的关系。

  大家选用spring 也正是因为,spring 帮我们 从复杂的对象关系的依赖维护中解脱出来。

# # IOC 容器

  在书中指出,容器有两个系列:一个是 beanFactory, 一个是 applicationContext 。 至于究竟是什么,我先不说。既然是容器,那就先理解成是水桶把,一个是木质的水桶,一个是钢铁的水桶。

  beanFactory 是一个接口。其实就是一个最简版的具有一定雏形的水桶,就像是打个样。它告诉大家,水桶要能装水,要有一个提手,装着水不能撒。

  所以 beanFactory 可以理解为低配版,而 applicationContext 是定制版,至尊版。

# # beanDefinition

 这个东东就是最核心的数据结构,就是它要完成对对象关系之间的抽象。 beanDefinition 就是水桶里边装的水。

# # 容器的设计

 # 第一条主线 beanFactory

  beanFactory 是一个接口,提供最基础的定义,像 getBean()

  下边 通过增加 接口的形式来扩展功能和定义。

  hierarchicalBeanFactory 接口实现了 beanFactory 接口,增加了getParentBeanFactory(),这个扩展赋予了管理双亲IOC容器的管理功能。

  configurableBeanFactory 接口 实现了  hierarchicalBeanFactory 接口,通过addBeanPostProcessor()配置 bean 的后置处理器

 从中我们可以学习到的是这种设计的理念,我们也可以通过这样接口设计的方式来进行功能的扩展。

# 第二条主线 applicationContext

 是从 beanFactory 到 configurableApplicationContext 或者  webApplicationContext  

 后边这两个是我们经常用到的。

# #  容器的启动过程

  容器的初始化是从 refresh() 开始的

  概括一下,这个过程分三步:BeanDefinition 的 Resource 定位 , 载入,注册 三个过程

  第一个过程,就是加载资源进来,就像想要在水桶里边装水,就需要先知道哪里有水源。就是把我们定义类 ,找到。

  第二个过程,就是把用户定义好的 Bean 表示成IOC 容器内部的数据结构。BeanDefinition  实际上就是对象在容器中抽象。

  第三个过程,

~ 这篇文章先到这里 ,没写完

发布了336 篇原创文章 · 获赞 295 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/star1210644725/article/details/104314023