首頁>技術>

這裡用eclipse來舉例,Spring容器是什麼?

Spring容器是Spring的核心,一切Spring bean都儲存在Spring容器內,並由其通過IoC技術管理。Spring容器也就是一個bean工廠(BeanFactory)。應用中bean的例項化,獲取,銷燬等都是由這個bean工廠管理的。

Spring容器究竟是什麼。

org.springframework.context.ApplicationContext介面用於完成容器的配置,初始化,管理bean。一個Spring容器就是某個實現了ApplicationContext介面的類的例項。也就是說,從程式碼層面,Spring容器其實就是一個ApplicationContext。

在普通的JAVA工程中,我們可以通過程式碼顯式new一個ClassPathXmlApplicationContext或者FileSystemXmlApplicationContext來初始化一個Spring容器。

在Web工程中,我們一般是通過配置web.xml的方式來初始化Spring容器。

Spring配置檔案

Spring配置檔案以XML格式呈現,如下:

       

在eclipse中,我們可以使用SpringSource Tool Suite工具來協助我們編寫Spring的配置檔案。

工程中允許有多個Spring配置檔案,我們可以按照自己的需求定義檔案的分類,例如可以從處理邏輯層級來區分:services.xml,daos.xml等。

另外,一個配置檔案可以引入多個其他的配置檔案,寫法如下:

     

通過ClassPathApplicationContext初始化Spring容器

new ClassPathXmlApplicationContext(new String[] {“services.xml”, “daos.xml”}); 
ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"services.xml", "daos.xml"});

我們寫這一句簡單的程式碼,其實Spring在裡面做了很多功夫。

首先Spring會從classpath路徑下找到services.xml和daos.xml檔案,

然後將檔案內的配置資訊讀取出來,

然後做了N多內部的初始化工作(關於容器初始化的詳細細節,後面我會補充一篇文章從原始碼角度詳細說明)。

我們還可以用FileSystemApplicationContext來初始化Spring容器,

ApplicationContext context = new FileSystemXmlApplicationContext(“D:/Test/services.xml”);
ApplicationContext context = new FileSystemXmlApplicationContext("D:/Test/services.xml");

這兩種方式效果是一樣的,只是通過不同的方式讀取配置檔案。

容器初始完後,我們就可以用這個容器來獲取我們之前配置了個bean,簡單示例如下:

// create and configure beansApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"services.xml", "daos.xml"});// retrieve configured instancePetStoreServiceImpl service = context.getBean("petStore", PetStoreServiceImpl.class);// use configured instanceList userList = service.getUsernameList();

Web工程的Spring配置

假設我們的web工程my-app的基礎目錄結構如下:

my-app

–src

—-resources

——services.xml

–WebContent

—-META-INF

—-WEB-INFI

——lib

——applicationContext.xml

——web.xml

那麼我們的web.xml需要這麼,配置方式如下:

 contextConfigLocation /WEB-INF/applicationContext.xml classpath:resources/services.xml org.springframework.web.context.ContextLoaderListener

contextConfigLocation:

contextConfigLocation指的是Spring該去哪裡讀取配置檔案,ContextLoaderListener用於啟動的web容器(如tomcat)時,去讀取配置檔案並完成Spring容器的初始化(包括載入bean等)。

關於contextConfigLocation的配置方式也是可以非常豐富的,還可以使用萬用字元 * ,這裡簡單舉幾個例子說明:

1. classpath:resources/services.xml

表示到web工程的classes/resources資料夾中查詢配置檔案。

2. classpath*:resources/services.xml

這種方式除了會到classes/resources資料夾查詢,還會到lib下面的jar包中查詢,查詢路徑是jar包內/resources/services.xml。

3. classpath:resouces/**/*services.xml

這種方式表示到classpath的resources資料夾下所有資料夾(不限層級,可以在第N層子資料夾中)中查詢檔名以services.xml結尾的檔案。

4. 多個路徑配置可以用空格分開

classpath知識補充:

web工程部署後,對應war包下的WEB-INF下會有一個classes資料夾和一個lib檔案,當然還有其他的。

其中classes資料夾中的內容是從工程中的原始碼資料夾(對應右鍵工程,Properties - Java Build Path - Source頁籤中看到的資料夾)中編譯過來,lib資料夾即工程中引用的jar包。

這個classes資料夾和lib中的jar都屬於classpath。

ContextLoaderListener:

這個Listener就是在標準Spring Web工程中Spring開始幹活的切入點,為什麼要說標準?因為我們可以寫一個自己的Listener去啟動Spring容器。扯遠了~

因為ContextLoaderListener實現了ServletContextListener,所以在web容器啟動時,ContextLoaderListener就悄悄開始工作了,至於怎麼工作的還需要點篇幅去描述,這篇文就先不細說。

【2】部分資料有時間限制,抓緊時間吧~、

最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Thinkphp5.1和vue實現前後端分離——第一天