1. 程式人生 > >classpath 和 classpath* 區別以及如何覆蓋在配置檔案中的Bean ID

classpath 和 classpath* 區別以及如何覆蓋在配置檔案中的Bean ID

寫spring的程式碼到現在,一直都很習慣性的拷貝web.xml中的內容,沒怎麼在意裡面的內容,最近認真研究了下,很多東西都不是很理解,特別是classpath和classpath*的區別,研究了許久才搞明白,記錄下備忘。 classpath 和 classpath* 區別classpath:只會到你指定的class路徑中查詢找檔案; classpath*:不僅包含class路徑,還包括jar檔案中(class路徑)進行查詢. 舉個簡單的例子,在我的web.xml中是這麼定義的:classpath*:META-INF/spring/application-context.xml 那麼在META-INF/spring這個資料夾底下的所有application-context.xml都會被載入到上下文中,這些包括META-INF/spring資料夾底下的 application-context.xml,META-INF/spring的子資料夾的application-context.xml以及jar中的application-context.xml。 如果我在web.xml中定義的是:classpath:META-INF/spring/application-context.xml 那麼只有META-INF/spring底下的application-context.xml會被載入到上下文中。

比如現在要加在一個jar包中的一些bean,然後我們想當中有一部分內容是需要覆蓋原來bean的內容,那麼我們可以這樣寫
(假設jar包配置檔案中的配置是在springjdbc當中)   
那麼在我們的專案當中可以這樣寫:

<import resource="classpath*:springjdbc/applicationContext*.xml"/>
  <context:property-override/>


此時我們只需要Import檔案即可,並將可以覆蓋的內容進行覆蓋

此外例如properties的檔案可以使用

<!-- 定義受環境影響易變的變數 -->

  

 <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

        <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />

        <property name="ignoreResourceNotFound" value="true" />

        <property name="locations">

            <list>

                <value>classpath*:/jdbc.properties</value>

            </list>

        </property>

    </bean>