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