zoukankan      html  css  js  c++  java
  • Spring源码:Spring IoC容器加载过程(1)

    Spring源码版本:4.3.23.RELEASE

    一、加载过程概览

    Spring容器加载过程可以在org.springframework.context.support.AbstractApplicationContext#refresh方法看到总体过程,具体细节需要断点调试:

     1     @Override
     2     public void refresh() throws BeansException, IllegalStateException {
     3         synchronized (this.startupShutdownMonitor) {
     4             // Prepare this context for refreshing.
     5             prepareRefresh();
     6 
     7             // Tell the subclass to refresh the internal bean factory.
     8             ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
     9 
    10             // Prepare the bean factory for use in this context.
    11             prepareBeanFactory(beanFactory);
    12 
    13             try {
    14                 // Allows post-processing of the bean factory in context subclasses.
    15                 postProcessBeanFactory(beanFactory);
    16 
    17                 // Invoke factory processors registered as beans in the context.
    18                 invokeBeanFactoryPostProcessors(beanFactory);
    19 
    20                 // Register bean processors that intercept bean creation.
    21                 registerBeanPostProcessors(beanFactory);
    22 
    23                 // Initialize message source for this context.
    24                 initMessageSource();
    25 
    26                 // Initialize event multicaster for this context.
    27                 initApplicationEventMulticaster();
    28 
    29                 // Initialize other special beans in specific context subclasses.
    30                 onRefresh();
    31 
    32                 // Check for listener beans and register them.
    33                 registerListeners();
    34 
    35                 // Instantiate all remaining (non-lazy-init) singletons.
    36                 finishBeanFactoryInitialization(beanFactory);
    37 
    38                 // Last step: publish corresponding event.
    39                 finishRefresh();
    40             }
    41 
    42             catch (BeansException ex) {
    43                 if (logger.isWarnEnabled()) {
    44                     logger.warn("Exception encountered during context initialization - " +
    45                             "cancelling refresh attempt: " + ex);
    46                 }
    47 
    48                 // Destroy already created singletons to avoid dangling resources.
    49                 destroyBeans();
    50 
    51                 // Reset 'active' flag.
    52                 cancelRefresh(ex);
    53 
    54                 // Propagate exception to caller.
    55                 throw ex;
    56             }
    57 
    58             finally {
    59                 // Reset common introspection caches in Spring's core, since we
    60                 // might not ever need metadata for singleton beans anymore...
    61                 resetCommonCaches();
    62             }
    63         }
    64     }

    后续文章根据以上标出来的每一个加载步骤进行解析。

  • 相关阅读:
    axios解决调用后端接口跨域问题
    vuex的使用入门-官方用例
    vue使用axios实现前后端通信
    vue组件间通信用例
    vue-router的访问权限管理
    vue-router使用入门
    PHP 流程控制
    PHP 表达式和运算符
    PHP 预定义变量
    PHP 常量
  • 原文地址:https://www.cnblogs.com/burthughes/p/spring_1.html
Copyright © 2011-2022 走看看