Spring предоставляет унифицированный механизм для доступа к ресурсам независимым от протокола способом. Приложение может работать с файловым ресурсом одинаковым образом, где бы он не был: в файловой системе, в classpath или на удаленном сервере.
В основе всей поддержки ресурсов Spring находится интерфейс Resource. В нем определены 10 методов: contentLength(), exists(), getDescription(), getFile(), getFileName(), getURI(), getURL(), isOpen(), isReadable() и lastModified(). Есть еще 1 метод: createRelative() - он создает новый экземпляр Resource, используя путь относительно экземпляра, на котором он вызывается. Можно сделать свои реализации Resource, но в большинстве случаев будет применяться одна из встроенных реализаций для доступа к файлу (класс FileSystemResource), пути классов (класс ClassPathResource) или URL-ресурсам (класс UrlResource). Для поиска и создания экземпляров Resource Spring внутри использует другой интерфейс, ResourceLoader , и его стандартную реализацию DefaultResourceLoader. Однако обычно вы не будете взаимодействовать с DefaultResourceLoader, а вместо этого работать с другой реализацией ResourceLoader — ApplicationContext:
public class ResDemo {
public static void main(String[] args) throws Exception{
ApplicationContext ctx = new
AnnotationConfigApplicationContext(AppConfig.class);
Resource r1 = ctx.getResource("file:///c:/tmp/tst.txt");
Resource r2 = ctx.getResource("classpath:tst.txt");
Resource r3 = ctx.getResource("http://www.google.com");
}
}
Для протоколов file: и http: Spring возвращает экземпляр UrlResource. Она включает класс FileSystemResource, но DefaultResourceLoader вообще не использует этот класс. Причина в том, что стандартная стратегия загрузки ресурсов в Spring трактует URL и файл как один и тот же тип ресурса, но с отличающимися протоколами (т.е. file: и http:). Если экземпляр FileSystemResource обязателен, применяйте FileSystemResourceLoader. Получив экземпляр Resource, вы можете работать с содержимым ресурса по своему усмотрению, используя getFile(),
getInputStream() или getURL(). В ряде случаев, например, когда применяется протокол http:, вызов getFile() дает в результате исключение FileNotFoundException. По этой причине рекомендуется использовать метод getInputStream() - он будет работать со всеми возможными типами ресурсов.
В основе всей поддержки ресурсов Spring находится интерфейс Resource. В нем определены 10 методов: contentLength(), exists(), getDescription(), getFile(), getFileName(), getURI(), getURL(), isOpen(), isReadable() и lastModified(). Есть еще 1 метод: createRelative() - он создает новый экземпляр Resource, используя путь относительно экземпляра, на котором он вызывается. Можно сделать свои реализации Resource, но в большинстве случаев будет применяться одна из встроенных реализаций для доступа к файлу (класс FileSystemResource), пути классов (класс ClassPathResource) или URL-ресурсам (класс UrlResource). Для поиска и создания экземпляров Resource Spring внутри использует другой интерфейс, ResourceLoader , и его стандартную реализацию DefaultResourceLoader. Однако обычно вы не будете взаимодействовать с DefaultResourceLoader, а вместо этого работать с другой реализацией ResourceLoader — ApplicationContext:
public class ResDemo {
public static void main(String[] args) throws Exception{
ApplicationContext ctx = new
AnnotationConfigApplicationContext(AppConfig.class);
Resource r1 = ctx.getResource("file:///c:/tmp/tst.txt");
Resource r2 = ctx.getResource("classpath:tst.txt");
Resource r3 = ctx.getResource("http://www.google.com");
}
}
Для протоколов file: и http: Spring возвращает экземпляр UrlResource. Она включает класс FileSystemResource, но DefaultResourceLoader вообще не использует этот класс. Причина в том, что стандартная стратегия загрузки ресурсов в Spring трактует URL и файл как один и тот же тип ресурса, но с отличающимися протоколами (т.е. file: и http:). Если экземпляр FileSystemResource обязателен, применяйте FileSystemResourceLoader. Получив экземпляр Resource, вы можете работать с содержимым ресурса по своему усмотрению, используя getFile(),
getInputStream() или getURL(). В ряде случаев, например, когда применяется протокол http:, вызов getFile() дает в результате исключение FileNotFoundException. По этой причине рекомендуется использовать метод getInputStream() - он будет работать со всеми возможными типами ресурсов.
Комментариев нет:
Отправить комментарий