天天看點

spring中classpath和classpath*的配置差別

在使用spring時,經常會看到類似 classpth:、classpath*: 這樣的字首,不管是加載spring xml配置檔案還是其配置檔案中加載資源檔案都會看到這兩種字首配置,其實這兩種字首是有差別的,下面将舉例詳細解釋。

[一]、測試項目準備

我們以spring中加載properties資源檔案為例講解,目錄結構大緻如下:

同時 在該項目的lib中添加一個測試的micmiu-test.jar包,jar包中的檔案結構如下:

從準備的測試環境中我們可以看到在不同目錄下的四個同名的application.properties資源檔案。

[二]、測試代碼:TestClassPath.java

<code>1</code>

<code>package</code> <code>com.micmiu.demoweb;</code>

<code>2</code>

<code>3</code>

<code>import</code> <code>org.springframework.context.ApplicationContext;</code>

<code>4</code>

<code>import</code><code>org.springframework.context.support.ClassPathXmlApplicationContext;</code>

<code>5</code>

<code>6</code>

<code>/**</code>

<code>7</code>

<code> </code><code>*</code>

<code>8</code>

<code>9</code>

<code> </code><code>*/</code>

<code>10</code>

<code>public</code> <code>class</code> <code>TestClassPath {</code>

<code>11</code>

<code>12</code>

<code>    </code><code>/**</code>

<code>13</code>

<code>     </code><code>* @param args</code>

<code>14</code>

<code>     </code><code>*/</code>

<code>15</code>

<code>    </code><code>public</code> <code>static</code> <code>void</code> <code>main(String[] args) {</code>

<code>16</code>

<code>        </code><code>ApplicationContext ctx = </code><code>new</code> <code>ClassPathXmlApplicationContext(</code>

<code>17</code>

<code>                </code><code>"classpath:/applicationContext.xml"</code><code>);</code>

<code>18</code>

<code>        </code><code>System.out.println(ctx.getClassLoader().getResource(</code><code>""</code><code>).getPath());</code>

<code>19</code>

<code>20</code>

<code>    </code><code>}</code>

<code>21</code>

<code>}</code>

[三]、測試結果

spring配置檔案:applicationContext.xml 中兩種不同的properties檔案加載配置:

第一種:classpath:

這種配置下運作測試代碼,日志資訊中有關加載properties資源檔案隻有一條 如下:

第二種: classpath*:

這種配置下運作測試代碼,日志資訊中有關加載properties資源檔案會有三條如下:

由此日志資訊可知:

同名資源存在時,classpath: 隻從第一個符合條件的classpath中加載資源,而classpath*: 會從所有的classpath中加載符合條件的資源

classpath*:需要周遊所有的classpath,效率肯定比不上classpath,是以在項目設計的初期就盡量規劃好資源檔案所在的路徑,避免使用classpath*來加載