Spring IOC-WebApplicationContext刷新(was.refresh())

来源:互联网 发布:用友网络未来价值2017 编辑:程序博客网 时间:2024/06/06 12:49

在 Spring配置web.xml中标签(ContextLoaderListener类解析)解析一文的最后我们留下了wac.refresh();是怎样执行的问题。
【在ContextLoader类中和FrameworkServlet中都执行了这行代码】
不管是在哪里调用refresh(),执行的都是AbstractApplicationContext的refresh()方法,这里再贴出相应的代码:

public void refresh() throws BeansException, IllegalStateException {              synchronized (this.startupShutdownMonitor) {                                      // Prepare this context for refreshing.                                       prepareRefresh();                                                             //会调用XmlWebApplicationContext.loadBeanDefinitions()方法                         ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory()        // 准备bean工厂                                                                   prepareBeanFactory(beanFactory);                                              try {                                                                             // Allows post-processing of the bean factory in context subclasse            postProcessBeanFactory(beanFactory);                                           //对beanFactory对象本身调用在此环境中注册的processors                                        invokeBeanFactoryPostProcessors(beanFactory);                                     //注册所有的对bean的processors                                                       registerBeanPostProcessors(beanFactory);                                      // Initialize message source for this context.                                //初始化国际化支持的bean                                                               initMessageSource();                                                                      //初始化时间发布器                                                                    initApplicationEventMulticaster();                                             //刷新之后执行的操作                                                                   onRefresh();                                                                                      //注册事件,从bean工厂得到或者这个类设置进来的                                                    registerListeners();                                                                   //实例化所有单例的bean                                                                finishBeanFactoryInitialization(beanFactory);                                 // Last step: publish corresponding event.                                    finishRefresh();                                                          }                                                                                                                                               catch (BeansException ex) {                                                       // Destroy already created singletons to avoid dangling resources.            destroyBeans();                                                               // Reset 'active' flag.                                                       cancelRefresh(ex);                                                            // Propagate exception to caller.                                             throw ex;                                                                 }                                                                         }                                                                         }                   

可以看到一系列的初始化,这样Context就完成了刷新(重新加载所有的定义的bean)

0 0
原创粉丝点击