[转]Spring Resource loader with GetResource() example
2013-12-04 14:45
453 查看
转载地址: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
2. URL path
3. Class path
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.
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.
Bean configuration file
Run it
Now you can get the resources from a bean.
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’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 theresource 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 ResourceLoader.getResource() & getResources()的理解
- java.lang.NoSuchMethodError: org.springframework.beans.factory.xml.XmlReaderContext.getResourceLoader()Lorg/springframework/core/io/ResourceLoader
- Spring JTA multiple resource transactions in Tomcat with Atomikos example
- Spring JTA multiple resource transactions in Tomcat with Atomikos example
- spring class.getClassLoader().getResource()和class.getResource()的不同
- Spring Resource bundle with ResourceBundleMessageSource example
- java文件路径问题及getResource和getClassLoader().getResource的区别
- Class.getResourceAsStream和ClassLoader.getResourceAsStream
- Java提高班 之深究java.lang.Class.getResource(String)与java.lang.ClassLoader.getResource(String)
- Java中资源(resource)获取 Class.getResource() & ClassLoader.getResource()
- Java class.getClassLoader().getResource("")获取资源路径
- 关于Class.getResource和ClassLoader.getResource的路径问题
- this.getClass().getClassLoader().getResource路径位置
- class.getResource与class.getClassLoader().getResource使用
- Class.getResource vs ClassLoader.getResource .
- Spring Batch MultiResourceItemReader example(八)
- Class.getResource与ClassLoader.getResource()区别
- className.class.getResourceAsStream()与ClassLoader.getSystemResourceAsStream() 的区别
- 关于Class.getResource和ClassLoader.getResource的路径问题
- .python-eggs is writable by group/others and vulnerable to attack when used with get_resource_filena