classpath 和 classpath* 區別以及如何覆蓋在配置檔案中的Bean ID
阿新 • • 發佈:2019-02-07
寫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當中)
那麼在我們的專案當中可以這樣寫:
比如現在要加在一個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>