《Spring Recipes》第二章筆記:Loading External Resources

《Spring Recipes》第二章筆記:Loading External Resources

 

問題

程序須要從不一樣的位置(文件系統,classpath,URL)讀取不一樣類型的資源(如文本文件,XML文件,properties文件或者圖片)。程序員須要使用不一樣的API來實現以上操做。java

解決方案

Spring的ResourceLoader接口提供了getResource()方法統一處理資源的加載。使用帶有不一樣前綴的資源路徑,能夠從不一樣位置加載資源。程序員

  • 使用file前綴從文件系統加載資源。
  • 使用classpath前綴從classpath加載資源。
  • 使用http前綴從URL加載資源。
  • 若是不指定前綴,資源將根據Context的類型進行加載,FileSystemXmlApplicationContext從文件系統加載,ClassPathXmlApplicationContext從classpath加載。

一個類若是須要讓容器注入ResourceLoader,須要實現ApplicationContextAware接口,或者ResourceLoaderAware接口。web

例:spring

 

public class MyResourceLoader implements ResourceLoaderAware {

	private ResourceLoader rs;

	@Override
	public void setResourceLoader(ResourceLoader rs) {
		this.rs = rs;
	}

	public void getFile() throws FileNotFoundException, IOException {
		Resource f = rs.getResource("file:D:/Windowssrsi2.ini");
		printFileContent(f);
	}

	public void getClasspathFile() throws FileNotFoundException, IOException {
		Resource f = rs
				.getResource("classpath:com/ljm/springrecipses/getresource/bean.xml");
		printFileContent(f);
	}
	
}

注入資源

 

Spring支持將Resource做爲依賴進行注入。ide

bean:this

 

public class BannerLoader {
  private Resource banner;
  public void setBanner(Resource banner) {
    this.banner = banner;
  }
... ...
}
 

 配置文件:直接在value中設定Resource的路徑。spa

 

<bean id="bannerLoader"
class="com.apress.springrecipes.shop.BannerLoader"
init-method="showBanner">
  <property name="banner">
     <value>classpath:com/apress/springrecipes/shop/banner.txt</value>
  </property>
</bean>
相關文章
相關標籤/搜索