Spring Resource loader с примером getResource ()
Загрузчик ресурсов Spring предоставляет очень общий методgetResource() для получения таких ресурсов, как (текстовый файл, медиафайл, файл изображения ...) из файловой системы, пути к классам или URL. Вы можете получить методgetResource() из контекста приложения.
Вот пример, показывающий, как использоватьgetResource() для загрузки текстового файла из
1. Файловая система
Resource resource = appContext.getResource("file:c:\\testing.txt");
2. URL-путь
Resource resource =
appContext.getResource("url:http://www.yourdomain.com/testing.txt");
3. Путь к классу
Resource resource =
appContext.getResource("classpath:com/example/common/testing.txt");
Вам просто нужно указать местоположение ресурса, а Spring обработает все остальное и вернет вам объект Resource.
Полный пример с методомgetResource().
package com.example.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/example/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 (ResourceLoaderAware)
Поскольку компонент не имеет доступа к контексту приложения, как компонент может получить доступ к ресурсам? Обходной путь - реализовать интерфейсResourceLoaderAware и создать метод установки для объектаResourceLoader. Spring добавит загрузчик ресурсов в ваш бин.
package com.example.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);
}
}
Файл конфигурации бина
Запустить его
package com.example.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.example.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/example/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();
}
}
}
Теперь вы можете получить ресурсы из бобов.
Заключение
Без этого метода getResource () вам придется работать с разными ресурсами с разными решениями, такими как объект File для ресурса файловой системы, объект URL для ресурса URL. Spring действительно хорошо поработал с этим универсальным методомgetResource(), он действительно сэкономил нам время на работу с ресурсами.
Скачать исходный код
Скачать -Spring-getResource-Example.zip