2014-07-04 22 views
0

有沒有一種方法可以輕鬆使用Spring Injection從文件夾位置(在部署的* .war或服務器文件夾中)獲取一個或多個* .xml數據文件和將* .xml文件中的數據注入Java類(例如,在Web服務中)?如果我能做到這一點,我已經被另一位程序員問過了。Spring向XML類注入XML數據文件

我已經看過一些關於stackoverflow的鏈接,但到目前爲止,我發現的最簡單的方法是將* .xml文件放入特定的文件夾位置(例如WEB-INF/classes)並使用像這樣取回他們:

Thread.currentThread().getContextClassLoader.getResourceAsStream("/WEB-INF/classes/data.xml") 

上述方法很容易;然而,顯然不是春季注射。有沒有辦法使用Spring Injection來做到這一點?我會認爲,因爲配置文件可以用這種方式加載,所以xml數據也可以類似地加載。

謝謝。

回答

2

Spring提供了一個名爲Resource的類,您可以使用它來將資源文件注入到spring bean中。所以,你可以這樣做:

public class Consumer { 

    public void setResource(Resource resource) { 
     DataInputStream resourceStream = new DataInputStream(resource.getInputStream()); 
     // ... use the stream as usual 
    } 

    ... 
} 

然後:

<bean class="Consumer"> 
    <property name="resource" value="classpath:path/to/file.xml"/> 
</bean> 

,或者

<bean class="Consumer"> 
    <property name="resource" value="file:path/to/file.xml"/> 
</bean> 

您也可以直接使用@Value註釋:

public class Consumer { 

    @Value("classpath:path/to/file.xml") 
    private Resource resource; 

    ... 
} 
+0

仍然有麻煩您推薦的上述設置:Resourc無論我在條目還是@Value條目中使用類路徑或文件,都不會找到e(xml文件)。將繼續嘗試。 – fuzzyanalysis

+0

@fuzzyanalysis確保在類路徑的開頭沒有使用'/'。它應該是'classpath:WEB-INF/classes/data.xml'而不是'classpath:/ WEB-INF/classes/data.xml'。 – metacubed

+0

好的。我是否將條目添加到beans.xml或applicationContext.xml中? – fuzzyanalysis