Spring IOC容器加载分为以下几个步骤:
定位配置文件:首先需要定位Spring配置文件,Spring提供了多种方式,如通过ClassPath、FileSystem等方式进行定位。
加载配置文件:在定位到配置文件后,通过BeanDefinitionReader读取配置文件,并将Bean定义信息加载到BeanDefinitionRegistry中。
实例化BeanFactory:将Bean定义信息转化为Bean实例,此时容器中还没有Bean实例化,只是将Bean定义信息注册到BeanFactory中。
预处理BeanDefinition:在实例化BeanFactory之后,需要对BeanDefinition进行一些预处理,如解析Bean的依赖关系、初始化占位符等。
注册BeanPostProcessor:Spring IOC容器提供了BeanPostProcessor接口,允许在Bean实例化前后进行一些自定义处理,需要将所有实现了BeanPostProcessor接口的类注册到容器中。
实例化非懒加载的单例Bean:在容器实例化后,容器会立即实例化所有非懒加载的单例Bean,这些Bean会在容器启动时创建,放入单例Bean缓存池中。
注册监听器:在Bean实例化之前,我们可以通过Spring提供的事件机制注册监听器,监听Bean实例化、销毁等事件。
初始化剩余的Bean:容器实例化后,会等待请求来初始化剩余的Bean,需要注意的是,懒加载的Bean只有在第一次使用时才会初始化。
容器启动完成:在容器完成以上步骤后,Spring IOC容器就启动成功了,可以通过getBean()方法获取之前注册的Bean实例。