Spring Framework provides excellent support for accessing low-level resources, thus solving many limitations of Java's standard java.net.URL
and standard handlers. The org.springframework.core.io.Resource
package and its many concrete implementations form a solid foundation for Spring Framework's robust resource handling.
Resource abstraction is used extensively in Spring itself, inside many implementations of ApplicationContext
—it's actually very useful to use as a general utility class by itself in your own code in order to access resources. You will find the following resource implementations that come supplied right out of the box in Spring:
Resource Implementation |
Description |
---|---|
|
It wraps |
|
It is used for accessing any resource from classpath using the prefix |
|
This is the resource implementation of |
|
This is the parent bean for inheriting configuration data from a parent bean definition. |
|
This is the resource implementation for a given |
Generally, you do not directly instantiate any of these resources; rather, you use a ResourceLoader
interface to do that job for you. All ApplicationContext
implement a ResourceLoader
interface; therefore, any ApplicationContext
can be used to obtain resource instances. The code for this is as follows:
ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"application-context.xml"}); Resource classPathResource = ctx.getResource("classpath:scripts/tasks-schema.sql"); Resource fileResource = ctx.getResource("file:///scripts/master-data.sql"); Resource urlResource = ctx.getResource("http://country.io/names.json");
You can inject resources into your beans by simply passing the filename or URL of your resource as an argument, as shown here. ApplicationContext
, which is a ResourceLoader
interface, will create an instance of an appropriate resource implementation based on the URL you supply:
@Value("http://country.io/names.json") private Resource countriesResource;
Here is the XML version of injecting a resource:
<property name="countriesResource" value="http://country.io/names.json"/>