Spring系列.IOC容器簡介

IOC容器簡介

咱們常常說Spring是一個IOC容器,Spring中這麼多代碼,那麼到底哪些類是IOC容器的主要表現形式呢?其實在Spring中IOC容器的主要表現形式是BeanFactory和ApplicationContext這兩個接口。這兩個接口的具體實現類就能夠當作是IOC容器在Spring中的具體體現。java

BeanFactory提供了最基本的IOC和依賴注入功能,ApplicationContext繼承了BeanFactory,在BeanFactory的基礎上添加了不少新功能,主要包括國際化、事件分發機制(ApplicationEvent)、資源訪問(Resource)等功能。在實際的開發過程當中,通常都會選擇ApplicationContext系列的容器實現。下面列舉下BeanFactory和ApplicationContext系列容器的常見實現類。spa

4940dae255711b624783020894d230e1.png

上圖是BeanFactory系列容器的繼承圖,須要重點關注的是DefaultListableBeanFactory,這個類是Spring默認使用基礎容器類。在每一個ApplicationContext容器中都使用這個基礎容器。code

3eb75ca13851da9109efd5dded782ac2.png

上圖是ApplicationContext系列的容器實現。經常使用的有ClasspathXmlApplicationContext和XmlWebApplicationContext。Spring Boot還推出WebServerApplicationContext系列容器,從名字能夠看出這個系列的容器是支持內嵌Web Server功能的。可是因爲本博客介紹的是基礎Spring FrameWork功能,就沒列舉WebServer系列容器。感興趣的能夠本身去看下Spring Boot的相關內容。xml

使用IOC容器

初始化容器的代碼繼承

//ClassPathXmlApplicationContext支持屢次refresh容器
	ApplicationContext context = new ClassPathXmlApplicationContext("services.xml","daos.xml");
    ApplicationContext context = new ClassPathXmlApplicationContext("classpath:/config/services.xml");
    ApplicationContext context = new ClassPathXmlApplicationContext("classpath:/${placeHolder}/services.xml");
    //使用groovy形式
    ApplicationContext context = new GenericGroovyApplicationContext("services.groovy", "daos.groovy");
    //先new再refresh()
	//不支持重複refresh
    GenericApplicationContext context = new GenericApplicationContext();
    new XmlBeanDefinitionReader(context).loadBeanDefinitions("services.xml", "daos.xml");
    context.refresh();

ClassPathXmlApplicationContext支持classpath:/${placeHolder}/services.xml這種以classpath打頭的入參接口

有時Spring的配置會比較多,若是將全部的配置都放在一個文件中會顯得比較亂。這時咱們能夠將同類別的配置放在一個配置文件中。而後再用impoer導入到一個文件中便可.事件

<beans>
    <import resource="services.xml"/>
    <import resource="resources/messageSource.xml"/>
    <import resource="/resources/themeSource.xml"/>
    <bean id="bean1" class="..."/>
    <bean id="bean2" class="..."/>
</beans>

配置形式

Spring支持多種形式的配置:傳統的xml形式,註解形式和Java code形式。資源

相關文章
相關標籤/搜索