# 2.4. The ResourceLoader
The ResourceLoader
interface is meant to be implemented by objects that can return (that is, load) Resource
instances. The following listing shows the ResourceLoader
interface definition:
public interface ResourceLoader {
Resource getResource(String location);
}
All application contexts implement the ResourceLoader
interface. Therefore, all application contexts may be used to obtain Resource
instances.
When you call getResource()
on a specific application context, and the location path specified doesn’t have a specific prefix, you get back a Resource
type that is appropriate to that particular application context. For example, assume the following snippet of code was executed against a ClassPathXmlApplicationContext
instance:
Resource template = ctx.getResource("some/resource/path/myTemplate.txt");
Against a ClassPathXmlApplicationContext
, that code returns a ClassPathResource
. If the same method were executed against a FileSystemXmlApplicationContext
instance, it would return a FileSystemResource
. For a WebApplicationContext
, it would return a ServletContextResource
. It would similarly return appropriate objects for each context.
As a result, you can load resources in a fashion appropriate to the particular application context.
On the other hand, you may also force ClassPathResource
to be used, regardless of the application context type, by specifying the special classpath:
prefix, as the following example shows:
Resource template = ctx.getResource("classpath:some/resource/path/myTemplate.txt");
Similarly, you can force a UrlResource
to be used by specifying any of the standard java.net.URL
prefixes. The following pair of examples use the file
and http
prefixes:
Resource template = ctx.getResource("file:///some/resource/path/myTemplate.txt");
Resource template = ctx.getResource("https://myhost.com/resource/path/myTemplate.txt");
The following table summarizes the strategy for converting String objects to Resource objects: