Spring源码分析(一)

Spring ioc abstractApplicationContext.refresh源码分析

今天闲来无事,自己又在最近手写了一个仿spring框架,特此回顾源码,以作纪念

在Spring中,构建容器的过程都是同步的,同步操作是为了保证容器构建的过程中,不出现多线程资源冲突问题

 public void refresh() throws BeanException,IllegalStateException{
     synchronized(this.startupShutdownMonitor)
    {
        ......
    }
 }

BeanFactory的构建,BeanFactory是ApplicationContext的父接口,是Spring框架的顶级容器工厂对象,BeanFactory只能管理bean对象,没有其他功能,如:aop切面管理,propertyplaceholder的加载,构建BeanFactory的功能就是管理bean对象

创建BeanFactory中管理的对象

postProcessBeanFactory 加载配置中BeanFactory无法处理的对象,如propertyplaceholder的加载

invokeBeanFactoryPostProcessors:将上一步加载的内容,作为一个容器可以管理的bean对象注册到ApplicationContext中,底层实质是将postProcessBeanFactory 中加载的内容包装成一个容器ApplicationContext

可以管理的bean对象

registerBeanPostProcessors:继续上一步的注册操作,配置文件中配置的bean对象都创建且注册完成

initMessageSource:i18n国际化,初始化国际化消息源

initApplicationEventMulticaster:注册事件多播监听,如ApplicationEvent事件,是Spring框架中的观察者模式实现机制

onRrefsh:初始化主题资源(ThemeSource),Spring框架提供的视图主题信息

registerListeners:创建监听器,并注册

finishBeanFactoryInitialization:初始化配置中出现的所有lazy-init=false的bean对象且bean对象必须是singleton的

finshRefresh:最后一步,发布最终事件,生命周期监听事件,spring定义了生命周期接口,可以实现容器启动调用初始化,容器销毁之前调用回收资源,实现了lifecycle接口。

posted @ 2019-12-27 20:39  计算机的探索者  阅读(132)  评论(0编辑  收藏  举报