發散問題——Spring容器及加載

1、前言 web

發散問題系列,是圍繞平常工做,發散思考,提取問題,並尋求答案的一個系列。總的來講,就是將遇到的問題發散來提出更多的問題,並經過解決發散問題,從而對問題有更深刻的瞭解,對知識有更深入的記憶,幫助自身的提升。歡迎你們將問題繼續發散,或者將已有問題更深刻的闡述,以達到共同進步的目的。 spring

   

2、背景描述 shell

有這樣一個幾個相關的工程: 框架

Shell層打包成war包後,會將其餘幾個項目的jar包引用到WEB_INF\lib目錄下 spa

這些工程的結構大體是這樣子的: 3d

   

3、問題提出 code

若是在shell項目的web.xml中,有設置以下: xml

   <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:/META-INF/spring/*.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

那麼,對象

1Spring的容器是什麼,用來幹什麼? blog

答:Spring 容器是 Spring 框架的核心。容器將建立對象,把它們鏈接在一塊兒,配置它們,並管理他們的整個生命週期從建立到銷燬。Spring 容器使用依賴注入(DI)來管理組成一個應用程序的組件。這些對象被稱爲 Spring Beans。經過閱讀配置元數據提供的指令,容器知道對哪些對象進行實例化,配置和組裝。配置元數據能夠經過 XMLJava 註釋或 Java 代碼來表示。

   

2)應用會加載哪些xml配置文件到spring中(本項目的xml、仍是包括其餘項目的xml,還會包括jar包的xml嗎?)

答:這裏要留意到"classpath*"這個符號,web.xmlclasspathclasspath*有如下區別:

classpath:只會到你的class路徑中查找找文件;

classpath*:不只包含class路徑,還包括jar文件中(class路徑)進行查找

因此,這樣子配置的話,會搜索本項目xml、其餘項目xml以及jar包中的xml。只要是位於/META-INF/spring/目錄下的xml,都會做爲Spring容器的配置文件加載到一塊兒。

   

3web.xml中指示讀了一堆xml,那這些配置是做爲同一個容器,仍是分開多個容器?

答:做爲同一個容器來讀取,也就是說,全部提到的xml裏面的bean都會裝載到一個容器上來。

   

4)這些xml的加載順序是怎麼樣的?

答:經試驗,順序不肯定,因此建議定義的每一個xml有本身的工做範圍,xmlxml之間不要有太多的關係,例如xml之間的bean互相引用,這樣子可能會形成加載時的問題。

相關文章
相關標籤/搜索