Spring的IOC容器初始化源碼分析一:super(parent)

IOC 容器的初始化包括 BeanDefinition Resource 定位、載入和註冊這三個基本的過程。

 以 ApplicationContext 爲例講解,ApplicationContext 系列容器也許是我們最熟悉的,因爲 Web 項 目 中 使 用 的XmlWebApplicationContext 就 屬 於 這 個 繼 承 體 系 , 還 有 ClasspathXmlApplicationContext 等,其繼承體系如下圖所示:

以ClassPathXmlApplicationContext爲例:

public ClassPathXmlApplicationContext(
			String[] configLocations, boolean refresh, @Nullable ApplicationContext parent)
			throws BeansException {
		//初始化父類
		super(parent);
		//設置本地的配置信息,創建環境對象ConfigurableEnvironment 、處理ClassPathXmlApplicationContext傳入的字符串中的佔位符;
		setConfigLocations(configLocations);
		//完成Spring容器初始化
		if (refresh) {
			refresh();
		}
	}
	
	
	//初始化父類
	super(parent);
	
	AbstractXmlApplicationContext類:
	public AbstractXmlApplicationContext(@Nullable ApplicationContext parent) {
		super(parent);
	}
	
	AbstractRefreshableConfigApplicationContext類:
	public AbstractRefreshableConfigApplicationContext(@Nullable ApplicationContext parent) {
		super(parent);
	}
	
	AbstractRefreshableApplicationContext類:
	public AbstractRefreshableApplicationContext(@Nullable ApplicationContext parent) {
		super(parent);
	}
	
	AbstractApplicationContext類:
	public AbstractApplicationContext(@Nullable ApplicationContext parent) {
		this();
		setParent(parent);
	}
	
	
	public AbstractApplicationContext() {
		this.resourcePatternResolver = getResourcePatternResolver();
	}
	
	public void setParent(@Nullable ApplicationContext parent) {
		this.parent = parent;
		if (parent != null) {
			Environment parentEnvironment = parent.getEnvironment();
			if (parentEnvironment instanceof ConfigurableEnvironment) {
				getEnvironment().merge((ConfigurableEnvironment) parentEnvironment);
			}
		}
	}	

繼承體系視圖如下所示:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章