IOC的核心就是代码入口就在AbstractApplictionContext

    public void refresh() throws BeansException, IllegalStateException {        synchronized (this.startupShutdownMonitor) {            // 在刷新容器前进行一些准备工作,例如设置容器的激活状态,校验容器环境所必须的启动参数            prepareRefresh();            // 刷新内部的BeanFactory,获得一个新鲜的BeanFactory,这里面主要是读取XML文件,将其转换为BeanDefinition            ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();            // 对BeanFactory进行进一步的完善,包括注册应用上下文感知以及监听器感知的BeanPostProcessor,            // 先注册一些系统的环境Bean            prepareBeanFactory(beanFactory);            try {                // 给子类在初始化BeanFactory重写修改变动beanFactory的权利                postProcessBeanFactory(beanFactory);                // 调用BeanFactoryPostProcessor,可以修改beanFactory,与上面不同的是,这里是类似插件的形式,耦合度更低                invokeBeanFactoryPostProcessors(beanFactory);                // 提前注册BeanPostProcessor,用于后期提供代理等功能                registerBeanPostProcessors(beanFactory);                // 初始化消息源,用于国际化                initMessageSource();                // 初始化应用事件广播器,用于广播应用上下文事件                initApplicationEventMulticaster();                // Initialize other special beans in specific context subclasses.                onRefresh();                // 为应用事件广播器初始化监听器(ApplicationListener)                registerListeners();                // 实例化并注册所有非懒加载的bean                finishBeanFactoryInitialization(beanFactory);                // 刷新容器后的额外工作,初始化生命周期执行器,发布容器刷新完毕的应用上下文事件                finishRefresh();            }            catch (BeansException ex) {                if (logger.isWarnEnabled()) {                    logger.warn("Exception encountered during context initialization - " +                            "cancelling refresh attempt: " + ex);                }                // Destroy already created singletons to avoid dangling resources.                destroyBeans();                // Reset 'active' flag.                cancelRefresh(ex);                // Propagate exception to caller.                throw ex;            }            finally {                // 清除掉不再需要的缓存,节省空间                resetCommonCaches();            }        }    }

未完待续。。。