Spring源码浅析

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

调用构造器

调用本类构造器,设置配置文件路径,然后执行refresh方法。
Spring源码浅析_第1张图片

refresh方法。


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

refresh中继续执行:

这里面会加载指定的xml配置文件,创建对象工厂。
refresh中继续执行:

prepareBeanFactory中对象工厂的一些设置。
继续执行:
支持国际化功能的:

初始化所有单实例bean:

其中:

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

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



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

在doGetBean方法里:
先检查是否有这个bean,第一次创建没有的。
有就去拿


所有单例bean放在这里:

没有就创建:


getSingleton方法:
先去拿:

拿不到就创建:

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

返回这个单例bean:


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



Spring里面最大的模式就是 工厂模式
         
          BeanFactory:bean工厂;工厂模式;帮用户创建bean


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

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

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

你可能感兴趣的:(Spring)