Перекрывая слезы и парчовые персонажи, жизнь состоит только из любви и тяжелой смерти.
Обзор
В этой статье вы узнаете о ресурсах или файлах (таких как текстовые файлы,XML-файл, файл свойств или файл изображения) вSpringРазличные реализации в контексте приложения.Spring ResourceLoaderдает нам единыйgetResource()метод для получения внешних ресурсов по пути к ресурсу.
ресурс(Resource)интерфейс
ResourceдаSpringОбщий интерфейс для представления внешних ресурсов в формате .
SpringзаResourceИнтерфейс предоставляет следующие 6 реализаций.
UrlResourceClassPathResourceFileSystemResourceServletContextResourceInputStreamResourceByteArrayResource
Мы можем указать разные префиксы для создания путей для загрузки ресурсов из разных мест.
| префикс | Пример | иллюстрировать |
|---|---|---|
classpath: |
classpath:com/myapp/config.xml |
Загрузить из пути к классам |
file: |
file:///data/config.xml |
из файловой системы какURLнагрузка. |
http: |
https://myserver/logo.png |
отURLнагрузка |
(none) |
/data/config.xml |
зависит от лежащего в основеApplicationContext
|
ResourceLoader
Он используется для загрузки ресурсов (таких как путь к классам или ресурсы файловой системы). Он имеет два метода:
//Expose the ClassLoader used by this ResourceLoader.
ClassLoader getClassLoader()
//Return a Resource handle for the specified resource location.
Resource getResource(String location)
getResource()Метод решит, какой экземпляр создать на основе пути к ресурсу.Resourceвыполнить.
получитьResourceLoader, пожалуйста, реализуйтеResourceLoaderAwareинтерфейс.
Resource banner = resourceLoader.getResource("file:c:/temp/filesystemdata.txt");
использоватьApplicationContextресурс загрузки
существуетSpring, все контексты приложения реализуютResourceLoaderинтерфейс. Следовательно, все контексты приложения могут использоваться для получения экземпляров ресурсов.
получитьApplicationContext, пожалуйста, реализуйтеApplicationContextAwareинтерфейс.
Resource banner = ctx.getResource("file:c:/temp/filesystemdata.txt");
использоватьResourceLoaderAwareресурс загрузки
Чтобы продемонстрировать различные примеры ниже, я поместил файл с одним и тем же именем в разные места и покажу, как загрузить каждый файл.
CustomResourceLoader.javaзаписывается следующим образом, он выводит в консоль содержимое загруженного файла ресурсов.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.springframework.context.ResourceLoaderAware;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
public class CustomResourceLoader implements ResourceLoaderAware
{
private ResourceLoader resourceLoader;
public void setResourceLoader(ResourceLoader resourceLoader) {
this.resourceLoader = resourceLoader;
}
public void showResourceData() throws IOException
{
//This line will be changed for all versions of other examples
Resource banner = resourceLoader.getResource("file:c:/temp/filesystemdata.txt");
InputStream in = banner.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
while (true) {
String line = reader.readLine();
if (line == null)
break;
System.out.println(line);
}
reader.close();
}
}
файлыapplicationContext.xmlЗапись в файле выглядит следующим образом:
<bean id="customResourceLoader" class="cn.howtodoinjava.demo.CustomResourceLoader"></bean>
для тестированияCustomResourceLoader beanи позвониshowResourceData()метод, используя следующий код:
@SuppressWarnings("resource")
public static void main(String[] args) throws Exception
{
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
CustomResourceLoader customResourceLoader = (CustomResourceLoader) context.getBean("customResourceLoader");
customResourceLoader.showResourceData();
}
Поскольку мы проходим
Springзагрузчик ресурсов для доступа к ресурсам, поэтому пользовательский загрузчик ресурсов должен реализовыватьApplicationContextAwareинтерфейс илиResourceLoaderAwareинтерфейс.
Загружать внешние ресурсы
Загружать ресурсы из корневой папки приложения
Для загрузки файлов из папки приложения используйте следующий шаблон:
Resource banner = resourceLoader.getResource("file:data.txt");
Загружать ресурсы из пути к классам
Чтобы загрузить файлы из пути к классам, используйте следующий шаблон:
Resource banner = resourceLoader.getResource("classpath:classpathdata.txt");
Загружать ресурсы из файловой системы
Для загрузки файлов из файловой системы вне папки приложения используйте следующий шаблон:
Resource banner = resourceLoader.getResource("file:c:/temp/filesystemdata.txt");
отURLресурс загрузки
из любогоURLДля загрузки файла используйте следующий шаблон:
Resource banner = resourceLoader.getResource("//howtodoinjava.com/readme.txt");
Все приведенные выше примеры загружают файлы ресурсов из их местоположения, и вы можете использовать их по мере необходимости.
Как вставлять внешние файлы
В приведенном выше примере мыCustomResourceLoaderИмя ресурса жестко запрограммировано в , многим оно может не понравиться и они захотят настроить его через файл контекста. Используйте приведенный ниже шаблон кода для настройки имен внешних ресурсов.
<bean id="customResourceLoader" class="com.howtodoinjava.demo.CustomResourceLoader">
<property name="resource">
<value>classpath:classpathdata.txt</value>
<!-- or -->
<value>file:data.txt</value>
</property>
</bean>
CustomResourceLoaderСледующее:
public class CustomResourceLoader {
private Resource resource;
public Resource getResource() {
return resource;
}
public void setResource(Resource resource) {
this.resource = resource;
}
}
После инициализации контекста ресурсы вводятся вCustomResourceLoaderизresourceв свойствах. существуетSpring Boot ResourceloaderЭтот же код можно использовать и в примере.
Оригинальная ссылка:Spring ResourceLoaderAware — чтение файла в Spring