我們通過ContextRegistry.GetContext()建立了一個IApplicationContext得實例,那么這個實例具體是怎么建立的了。
我們來分析一下容器實例建立的過程:
我們在配置文件中加入了:
- <sectionGroup name="<a href="http://lib.csdn.net/base/javaee" class='replace_word' title="Java EE知識庫" target='_blank' style='color:#df3434; font-weight:bold;'>spring</a>">
- <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
- </sectionGroup>
配置文件明明是Spring.Context.Support.ContextHandler類,與容器有什么關系了?
Spring.Context.Support.ContextHandler 類繼承IConfigurationSectionHandler。(.net Framework 2.0以后要求繼承ConfigurationSection類,IConfigurationSectionHandler類被否決。)提供了配置節點spring.context的處理。我們只需要在節點spring.context中提供容器的配置,系統就會按配置生成容器。
在Spring.Context.Support.ContextHandler 類中我們有這樣一個屬性:
protected virtual Type DefaultApplicationContextType
{
get { return typeof (XmlApplicationContext); }
}
這里的默認程序容器類型為XmlApplicationContext,也就是說我們實際建立的容器類型是XmlApplicationContext。
下面我們來看下類XmlApplicationContext.
從上圖我們可以看出XmlApplicationContext類是IApplicationContext接口的一個實現,當然直接實現類是AbstractApplicationContext。
總結:當我們調用ContextRegistry.GetContext()取得容器時,系統會按照配置文件使用XmlApplicationContext類建立一個IApplicationContext得實例。