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