zoukankan      html  css  js  c++  java
  • 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接口。

  • 相关阅读:
    JDBC提高mysql入库的效率!
    Java域名解析,类似nslookup
    request.getReader()的怪异事件
    程序一部署上就占了tomcat的2G内存
    nginx简介及简单使用
    ubuntu安装hadoop(伪分布)
    .Net Famework 和 Library的源码下载
    将switch case转为条件驱动
    Asp.net 和 Comet 开发入门, 第一个例子
    HTML, CSS和Javascript调试入门
  • 原文地址:https://www.cnblogs.com/qyx66/p/12109526.html
Copyright © 2011-2022 走看看