[转]Spring Resource loader with GetResource() example

转载 2013年12月04日 14:45:47

转载地址:http://www.mkyong.com/spring/spring-resource-loader-with-getresource-example/

Spring’s resource loader provides a very generic getResource() method to get the resources like (text file, media file, image file…) from file system , classpath or URL. You can get the getResource() method from the application context.

Here’s an example to show how to use getResource() to load a text file from

1. File system

Resource resource = appContext.getResource("file:c:\\testing.txt");

2. URL path

Resource resource = appContext.getResource("url:http://www.yourdomain.com/testing.txt");

3. Class path

Resource resource = appContext.getResource("classpath:com/mkyong/common/testing.txt");

You just need to specify the resource location, and the Spring will handle the rest and return you a Resource object.

Full example withgetResource() method.

package com.mkyong.common;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.Resource;
public class App 
{
    public static void main( String[] args )
    {
    	ApplicationContext appContext = 
    	   new ClassPathXmlApplicationContext(new String[] {"If-you-have-any.xml"});
 
    	Resource resource = 
           appContext.getResource("classpath:com/mkyong/common/testing.txt");
 
    try{
     	  InputStream is = resource.getInputStream();
          BufferedReader br = new BufferedReader(new InputStreamReader(is));
 
          String line;
          while ((line = br.readLine()) != null) {
             System.out.println(line);
       	  } 
          br.close();
 
    	}catch(IOException e){
    		e.printStackTrace();
    	}
 
    }
}

Bean resource loader (ResourceLoaderAware)

Since bean does not have the application context access, how can a bean access a resources? The workaround is implement the ResourceLoaderAware interface and create setter method for ResourceLoader object. Spring will DI the resource loader into your bean.

package com.mkyong.customer.services;
 
import org.springframework.context.ResourceLoaderAware;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
 
public class CustomerService implements ResourceLoaderAware
{
	private ResourceLoader resourceLoader;
 
	public void setResourceLoader(ResourceLoader resourceLoader) {
		this.resourceLoader = resourceLoader;
	}
 
	public Resource getResource(String location){
		return resourceLoader.getResource(location);
	}
}

Bean configuration file

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
 
   <bean id="customerService" 
           class="com.mkyong.customer.services.CustomerService" />
 
</beans>

Run it

package com.mkyong.common;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.Resource;
 
import com.mkyong.customer.services.CustomerService;
public class App 
{
    public static void main( String[] args )
    {
    	ApplicationContext appContext = 
    	   new ClassPathXmlApplicationContext(new String[] {"Spring-Customer.xml"});
 
    	CustomerService cust = 
           (CustomerService)appContext.getBean("customerService");
 
    	Resource resource = 
            cust.getResource("classpath:com/mkyong/common/testing.txt");
 
    try{
          InputStream is = resource.getInputStream();
          BufferedReader br = new BufferedReader(new InputStreamReader(is));
 
          String line;
          while ((line = br.readLine()) != null) {
     	       System.out.println(line);
          } 
          br.close();
 
    	}catch(IOException e){
    		e.printStackTrace();
    	}
 
    }
}

Now you can get the resources from a bean.

Conclusion

Without this getResource() method, you will need to deal with different resources with different solution, like File object for file system resource, URL object for URL resource. Spring really did a good job with this super generic getResource()method, it really save our time to deal with resources.

【Spring】资源访问 ApplicationContext.getResource

为了深入理解 Spring 提供的资源访问方法 ApplicationContext.getResource ,这里在Maven project 下做测试,发现两点: 1. ApplicationCo...
  • u011704894
  • u011704894
  • 2015年03月17日 16:30
  • 1651

Spring ResourceLoader.getResource() & getResources()的理解

    关于Spring Resource的资源类型以及继承体系我们已经在上一篇文件粗略的说了一下。Spring加载Resource文件是通过ResourceLoader来进行的,那么我们就先来...
  • supportUAT
  • supportUAT
  • 2016年03月19日 15:40
  • 3958

Java 资源文件路径详解(getResource)

获取资源文件的方法说明: getResourceAsStream ()返回的是inputstream getResource()返回:URL Class...
  • sinat_27535209
  • sinat_27535209
  • 2016年10月31日 17:36
  • 7479

Java中资源(resource)获取 Class.getResource() & ClassLoader.getResource()

Java中的资源可以是一个图片,xml文件,音频等等形式的文件,在开发的过程中尤其是对xml文件的使用相当频繁。在Java中,类Class和ClassLoader中提供了相应的方法去定位这些资源,如g...
  • redhat456
  • redhat456
  • 2010年07月12日 15:37
  • 10711

使用Class.getResource(),ClassLoader.getResource(),ResourceBundle.getBundle ()进行资源定位

http://www.javaworld.com/article/2077352/java-se/smartly-load-your-properties.html http://stackoverf...
  • hotdust
  • hotdust
  • 2016年11月02日 13:46
  • 358

this.getClass().getResource详细讲解

this.getClass().getResource详细讲解
  • wangyonglin1123
  • wangyonglin1123
  • 2016年06月06日 21:47
  • 5705

JavaEE 保存文件获取绝对路径getResource("")和servletContext.getRealPath("/")

假如我们要想在web项目中保存文件,其必须先要获取保存文件的绝对路径,我主要采用有如下两种: 假如有如下的目录: shop       -uploadPic       -WEB-INFO...
  • fengshizty
  • fengshizty
  • 2014年06月03日 14:24
  • 3868

java文件路径问题及getResource和getClassLoader().getResource的区别

我们经常在java的io操作中读取文件,先看一个场景: 这样是读不到这个file文件的,会发生filenotfoundexception 如果我把文件放到了src/main/java下呢,还是会发...
  • u012572955
  • u012572955
  • 2016年10月21日 11:02
  • 3424

springboot读取resource下的文本文件

文本所在位置: 获取ZH.txt: File file = ResourceUtils.getFile("classpath:dataFile/ZH.txt");...
  • programmeryu
  • programmeryu
  • 2017年02月27日 10:42
  • 14628

SpringMVC运行报错 unable to find resource 'XXX.vm' in any resource loader

检查Controller层的方法是否添加@ReponseBody注解,如果没有@ReponseBody注解,有可能会报这个错。 与前台页面交互的方法加上@ReponseBody和@RequestMa...
  • GarfieldEr007
  • GarfieldEr007
  • 2016年12月14日 23:41
  • 2777
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[转]Spring Resource loader with GetResource() example
举报原因:
原因补充:

(最多只允许输入30个字)