La interfaz ResourceLoader está diseñada para ser implementada por objetos que pueden devolver (es decir, cargar) instancias de Resource. La siguiente lista muestra la definición de la interfaz ResourceLoader:
public interface ResourceLoader {
Resource getResource(String location);
ClassLoader getClassLoader();
}
Todos los contextos de aplicación implementan la interfaz ResourceLoader. Por lo tanto, todos los contextos de la aplicación se pueden utilizar para obtener instancias de Resource.
Si llama a getResource() en un contexto de aplicación específico y la ruta de ubicación especificada no tiene un prefijo específico, obtendrá de vuelta el tipo de Resource correspondiente a ese contexto de aplicación específico. Por ejemplo, supongamos que el siguiente fragmento de código se ejecutó en una instancia ClassPathXmlApplicationContext:
Resource template = ctx.getResource("some/resource/path/myTemplate.txt");
val template = ctx.getResource("some/resource/path/myTemplate.txt")
Para ClassPathXmlApplicationContext este código devuelve ClassPathResource. Si se ejecutara el mismo método en una instancia FileSystemXmlApplicationContext, devolvería un FileSystemResource. Para WebApplicationContext devuelve un ServletContextResource. Asimismo, devolverá los objetos apropiados para cada contexto.
Como resultado, es posible cargar recursos según un contexto de aplicación específico.
Por otro lado, también puede forzar el uso de ClassPathResource independientemente del tipo de contexto de la aplicación especificando un prefijo especial classpath:, como se muestra en el siguiente ejemplo. :
>Resource template = ctx.getResource("classpath:some/resource/path/myTemplate.txt");
val template = ctx.getResource("classpath:some/resource/path/myTemplate.txt")
Del mismo modo, puede forzar el uso de UrlResource especificando cualquiera de los prefijos estándar java.net.URL. Los siguientes ejemplos utilizan los prefijos file y https:
Resource template = ctx.getResource("file:///some/resource/path/myTemplate.txt");
val template = ctx.getResource("file:///some/resource/path/myTemplate.txt")
Resource template = ctx.getResource("https://myhost.com/resource/path/myTemplate.txt");
val template = ctx.getResource("https://myhost.com/resource/path/myTemplate.txt")
La siguiente tabla describe brevemente la estrategia para convertir objetos String en objetos Resource:
| Prefix | Example | Explanation |
|---|---|---|
| classpath: |
|
Loads from the classpath. |
| file: |
|
Loads as |
| https: |
|
Loads as |
| (none) |
|
Depends on the underlying interface |
GO TO FULL VERSION