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:

Java
Resource template = ctx.getResource("some/resource/path/myTemplate.txt");
Kotlin
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. :

Java
>Resource template = ctx.getResource("classpath:some/resource/path/myTemplate.txt");
Kotlin
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:

Java
Resource template = ctx.getResource("file:///some/resource/path/myTemplate.txt");
Kotlin
val template = ctx.getResource("file:///some/resource/path/myTemplate.txt")
Java
Resource template = ctx.getResource("https://myhost.com/resource/path/myTemplate.txt");
Kotlin
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:

Tabla 10. Líneas de recursos
Prefix Example Explanation

classpath:

classpath:com/myapp/config.xml

Loads from the classpath.

file:

file:///data/config.xml

Loads as URL from the file system.

https:

https://myserver/logo.png

Loads as URL.

(none)

/data/config.xml

Depends on the underlying interface ApplicationContext.