学习 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
后边这两个是我们经常用到的。
# # 容器的启动过程
标签:容器,beanFactory,水桶,spring,接口,源码,IOC From: https://blog.51cto.com/u_15812686/5740072