Spring中bean的加载过程

1.获取配置文件资源:
通过 ResourceLoader 来完成资源文件位置的定位,DefaultResourceLoader 是默认的实现, 同时上下文本身就给出了 ResourceLoader 的实现,可以从类路径、文件系统, URL 等方式 来定为资源位置。


2.对bean定义信息的解析:
容器通过 BeanDefinitionReader 来完成 bean 定义信息的解析,使 用的是 XmlBeanDefinitionReader 来解析 bean 的 xml 定义文件,实际的处理过程是委托给 BeanDefinitionParserDelegate 来完成的,从而得到 bean 的定义信息,这些信息在 Spring 中 使用 BeanDefinition 对象来表示


3.加载提取bean并注册(添加到beanDefinitionMap中):
 IoC 容器 解析得到 BeanDefinition 以后,需要把它在 IoC 容器中注册,这由 IoC 实现 BeanDefinitionRegistry 接口来实现。注册过程就是在 IoC 容器内部维护的一个 HashMap 来保存得到的 BeanDefinition 的过程。这个 HashMap 是 IoC 容器持有 bean 信息的场所, 以后对 bean 的操作都是围绕这个 HashMap 来实现的。 


4.bean的初始化:
通过DefaultListableBeanFactory的getBean()方法去初始化,实际由AbstractAutowireCapableBeanFactory的doCreateBean()去完成。
一个是创建 Bean 实例的 createBeanInstance 方法,一个是依赖注入的 populateBean 方法,还有就是回调方法 initializeBean。
// BeanPostProcessor两个方法: postProcessBeforeInitialization 和 postProcessAfterInitialization,两个方法分别在 Bean 初始化之前和初始化之后得到执行

Spring源码解析精髓帖:

http://www.importnew.com/27469.html

猜你喜欢

转载自blog.csdn.net/weixin_44227923/article/details/87697194