1、BeanFactory和FactoryBean
BeanFactory是一个接口类,定义了IOC容器最基本的形式,提供了IOC容器所应该遵守的基本服务契约。
FactoryBean是一个能产生或者修饰对象生成的工厂Bean,实现方式与工厂模式和修饰器模式类似。
2、getBean()
getBean()方法是使用IOC容器API的主要方法,可以通过指定名字的索引来获取IOC容器的Bean。
3、BeanFactory的设计原理
4、ApplicationContext
ApplicationContext除了可以提供容器的那些基本功能外,还为用户提供了各种附加服务。
MessageSource,支持国际化,为开发多语言版本应用提供服务。
访问资源更加方便。
支持应用事件,继承了接口ApplictionEventPublisher,在上下文中引入了事件机制。
在ApplicationContext提供附加服务,使IOC容器的工能更加丰富。
5、IOC容器的初始化
IOC容器的初始化是通过refresh()f方法来启动的,这个方法是用来启动IOC容器,IOC容器的启动过程:BeanDefinition的资源Resource定位、载入和注册。
Spring将这三个过程分离,分别用不同的模块进行,使用户可以更加方便的适合自己的IOC容器的初始化过程。
(1)Resource定位
由ResourceLoader通过统一的Resource接口来实现的,这个Resource接口对各种Definition定义了统一的接口。
(2)BeanDefinition的载入
BeanDefinition就是的普通的POJO的抽象表示,通过BeanDefinition定义的数据结构,是IOC容器可以更加方便的管理Bean。
(3)向IOC容器注册BeanDefinition
通过调用BeanDefinitionRegistry接口的实现来完成的,把载入过程中解析到的BeanDefinition在IOC容器中注入到一个HashMap中,IOC容器通过HashMap来持有这些BeanDefinition。
IOC的初始化过程不包含依赖注入,依赖注入发生在第一次通过getBean()从容器中获取Bean的时候。我们可以通过对预实例化的配置来规定依赖注入的发生时间。