在使用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*來加載