spring 加载

1. web.xml中的ContextLoaderListener根据ContextConfigLocation加载配置文件。
   过程摘要:
   a.根据ContextLoader.properties将org.springframework.web.context.support.XmlWebApplicationContext设为SystemProperties
   b.loadParentContextlocator.useBeanFactory(parentContextKey)
2. 先将beans.xml中的各个bean定义加载到WebApplicationContext中,加载的过程中,解析xml的各种节点,如bean ,import, alias等。
   过程摘要:
   createDefinition->loadBeanDefinitions, refreshBeanFactory,loadBeanDefinitions
3. 加载的过程中只加载并不实例化,默认情况下是假如bean Id相同,那么覆盖
4. 全部加载完成之后, 开始实例化
   initializeDefinition 将bean放到singletonCache中,
   并return beanDefines
5. 将beanDefines,servletContext,configLocation放到WebApplicationContext中
6. 将WebApplicationContext放到servletContext中。

spring还可以定义子容器,
  
public class SessionContext extends XmlBeanFactory{
	private GlobalSession globalSession;
	public static final String CONTEXT_CONFIG_FILE = "WEB-INF/sessionContext.xml";
	
	public SessionContext(GlobalSession globalSession,String configLocations, ApplicationContext parent) throws BeansException {
		super(new FileSystemResource(configLocations), [color=darkred]parent[/color]);
		this.globalSession = globalSession;
	}

	public GlobalSession getGlobalSession() {
		return globalSession;
	}
}

这样,当加载的时候,可以先从子容器SessionContext中加载,当加载不到的时候,spring会自动去搜索parent容器里的bean.

你可能感兴趣的:(spring,bean,xml,Web)