The ResourceLoader interface is intended to be implemented by objects that can return (that is, load) Resource instances. The following listing shows the definition of the ResourceLoader interface:
public interface ResourceLoader {
Resource getResource(String location);
ClassLoader getClassLoader();
}
All application contexts implement the ResourceLoader interface. Therefore, all application contexts can be used to obtain Resource instances.
If you call getResource() on a specific application context, and the specified location path does not have a specific prefix, you will get back the Resource type corresponding to that specific application context. For example, suppose the following code snippet was run against a ClassPathXmlApplicationContext instance:
Resource template = ctx.getResource("some/resource/path/myTemplate.txt");
val template = ctx.getResource("some/resource/path/myTemplate.txt")
For ClassPathXmlApplicationContext this code returns ClassPathResource. If the same method were run on a FileSystemXmlApplicationContext instance, it would return a FileSystemResource. For WebApplicationContext it returns a ServletContextResource. Likewise, it will return the appropriate objects for each context.
As a result, it becomes possible to load resources according to a specific application context.
On the other hand, you can also force the use of ClassPathResource regardless of the application context type by specifying a special prefix classpath:, as shown in the following example:
Resource template = ctx.getResource("classpath:some/resource/path/myTemplate.txt");
val template = ctx.getResource("classpath:some/resource/path/myTemplate.txt")
Similarly, you can force the use of UrlResource by specifying any of the standard java.net.URL prefixes. The following examples use the file and https prefixes:
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")
The following table briefly describes the strategy for converting String objects to Resource objects:
| Prefix | Example | Explanation |
|---|---|---|
| classpath: |
|
Loads from the classpath. |
| file: |
|
Loads as |
| https: |
|
Loads as |
| (none) |
|
Depends on the underlying interface |
GO TO FULL VERSION