WEB开发网
开发学院软件开发Java Spring 框架的设计理念与设计模式分析 阅读

Spring 框架的设计理念与设计模式分析

 2010-06-14 00:00:00 来源:WEB开发网   
核心提示: Ioc 容器如何工作 前面介绍了 Core 组件、Bean 组件和 Context 组件的结构与相互关系,下面这里从使用者角度看一下他们是如何运行的,Spring 框架的设计理念与设计模式分析(7),以及我们如何让 Spring 完成各种功能,Spring 到底能有那些功能,如何创建 BeanF

Ioc 容器如何工作

前面介绍了 Core 组件、Bean 组件和 Context 组件的结构与相互关系,下面这里从使用者角度看一下他们是如何运行的,以及我们如何让 Spring 完成各种功能,Spring 到底能有那些功能,这些功能是如何得来的,下面介绍。

如何创建 BeanFactory 工厂

正如图 2 描述的那样,Ioc 容器实际上就是 Context 组件结合其他两个组件共同构建了一个 Bean 关系网,如何构建这个关系网?构建的入口就在 AbstractApplicationContext 类的 refresh 方法中。这个方法的代码如下:

清单 1. AbstractApplicationContext.refresh

public void refresh() throws BeansException, IllegalStateException { 
  synchronized (this.startupShutdownMonitor) { 
    // Prepare this context for refreshing. 
    prepareRefresh(); 
    // Tell the subclass to refresh the internal bean factory. 
    ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory(); 
    // Prepare the bean factory for use in this context. 
    prepareBeanFactory(beanFactory); 
    try { 
      // Allows post-processing of the bean factory in context subclasses. 
      postProcessBeanFactory(beanFactory); 
      // Invoke factory processors registered as beans in the context. 
      invokeBeanFactoryPostProcessors(beanFactory); 
      // Register bean processors that intercept bean creation. 
      registerBeanPostProcessors(beanFactory); 
      // Initialize message source for this context. 
      initMessageSource(); 
      // Initialize event multicaster for this context. 
      initApplicationEventMulticaster(); 
      // Initialize other special beans in specific context subclasses. 
      onRefresh(); 
      // Check for listener beans and register them. 
      registerListeners(); 
      // Instantiate all remaining (non-lazy-init) singletons. 
      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; 
    } 
  } 
} 

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:Spring 框架 设计理念

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接