Spring源码浅析

启动Spring容器,加载xml配置文件

《Spring源码浅析》

调用构造器

《Spring源码浅析》

调用本类构造器,设置配置文件路径,然后执行refresh方法。

《Spring源码浅析》

refresh方法。

《Spring源码浅析》

进来先执行prepareRefresh准备方法,其中设置启动时间,其他设置等等,执行完会打印:

《Spring源码浅析》

refresh中继续执行:

《Spring源码浅析》

这里面会加载指定的xml配置文件,创建对象工厂。

refresh中继续执行:

《Spring源码浅析》

prepareBeanFactory中对象工厂的一些设置。

继续执行:

支持国际化功能的:

《Spring源码浅析》

初始化所有单实例bean:

《Spring源码浅析》

其中:

《Spring源码浅析》

再其中:拿到所有bean的名字

《Spring源码浅析》

然后,按顺序创建所有非懒加载的,单例的,非抽象的bean。

《Spring源码浅析》

《Spring源码浅析》

《Spring源码浅析》

所有的getBean方法都是调用doGetBean方法:

《Spring源码浅析》

在doGetBean方法里:

先检查是否有这个bean,第一次创建没有的。

有就去拿

《Spring源码浅析》

《Spring源码浅析》

所有单例bean放在这里:

《Spring源码浅析》

没有就创建:

《Spring源码浅析》

getSingleton方法:

先去拿:

《Spring源码浅析》

拿不到就创建:

《Spring源码浅析》

如果是新建的就添加到容器中:

《Spring源码浅析》

返回这个单例bean:

《Spring源码浅析》


ioc就是一个容器,单实例bean保存在一个map中;
DefaultSingletonBeanRegistry-singletonObjects;

Spring里面最大的模式就是
工厂模式

          <bean class=””></bean>

          BeanFactory:bean工厂;工厂模式;帮用户创建bean

BeanFactory:bean工厂接口;负责创建bean实例;容器里面保存的所有单例bean其实是一个map;是Spring最底层的接口;

ApplicationContext:是容器接口;更多的负责容器功能的实现;(可以基于beanFactory创建好的对象之上完成强大的容器),可以从map获取这个bean。

自定义类继承ApplicationContextAware或BeanFactoryAware接口可以获得ApplicationContext或BeanFactory。

    原文作者:Spring Cloud
    原文地址: https://blog.csdn.net/wdx1121/article/details/81011993
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞