Master Spring & Java Development!
Subscribe to Ram N Java for clean, beginner-friendly coding guides!
🔔 Subscribe to Ram N JavaOverview: ResourceLoaderAware in Spring
In the Spring Framework, applications frequently need to load external resources such as text files, XML configurations, or images from the classpath, file system, or web URLs. While Spring's ApplicationContext implements the ResourceLoader interface directly, a bean can obtain a reference to this loader cleanly during its lifecycle by implementing the ResourceLoaderAware interface.
In this guide, you will learn how the ResourceLoaderAware interface works, how Spring injects the ResourceLoader instance, and how to use it to load external resources easily.
Understanding ResourceLoaderAware
The ResourceLoaderAware interface is part of Spring's set of "Aware" callback interfaces:
-
Lifecycle Callback: When a bean implements
ResourceLoaderAware, Spring automatically invokes itssetResourceLoader(ResourceLoader resourceLoader)method during bean initialization. -
Unified Resource Access: The injected
ResourceLoaderprovides thegetResource(location)method, supporting prefixes likeclasspath:,file:, and standard URLs. -
No Direct ApplicationContext Coupling: It grants your bean the ability to load external resources without requiring full access to the broader
ApplicationContext.
Step-by-Step Implementation
-
Implement the Interface: Have your bean class implement
org.springframework.context.ResourceLoaderAware. -
Override setResourceLoader(): Store the passed
ResourceLoaderreference in a member field:
public void setResourceLoader(ResourceLoader resourceLoader) {
this.resourceLoader = resourceLoader;
} -
Load Resources: Use the
resourceLoader.getResource("classpath:sample.txt")method to retrieve and process files seamlessly.
Recommended Next Videos from Ram N Java
Click here to watch on Youtube:
https://www.youtube.com/watch?v=mi9Imd__Ty4&list=UUhwKlOVR041tngjerWxVccw
Click the below Image to Enlarge:
| Spring ResourceLoaderAware example | Spring Tutorial | Spring Framework | Spring basics |
| Spring ResourceLoaderAware example | Spring Tutorial | Spring Framework | Spring basics |
| Spring ResourceLoaderAware example | Spring Tutorial | Spring Framework | Spring basics |
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0%20http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ram.core</groupId>
<artifactId>SpringDemo</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>SpringDemo</name>
<url>http://maven.apache.org</url>
<properties>
<spring.version>5.0.2.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- Spring 5 dependencies -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0%20http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ram.core</groupId>
<artifactId>SpringDemo</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>SpringDemo</name>
<url>http://maven.apache.org</url>
<properties>
<spring.version>5.0.2.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- Spring 5 dependencies -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
names.txt
Peter
Ram
Juli
Ram
Juli
ResourceLoaderAwareImpl.java
package com.ram.aware;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import org.springframework.context.ResourceLoaderAware;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
public class ResourceLoaderAwareImpl implements ResourceLoaderAware
{
private ResourceLoader resourceLoader;
public void setResourceLoader(ResourceLoader resourceLoader)
{
System.out.println(
"setResourceLoader(ResourceLoader resourceLoader) is called "
+ "by the Spring Container");
this.resourceLoader = resourceLoader;
}
public void displayFileInfo()
{
Resource resource = resourceLoader.getResource("classpath:names.txt");
try (
BufferedReader br = new BufferedReader(
new FileReader(resource.getFile().getPath())))
{
String thisLine = null;
System.out.println("Names from the files are..");
while ((thisLine = br.readLine()) != null)
{
System.out.println(thisLine);
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import org.springframework.context.ResourceLoaderAware;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
public class ResourceLoaderAwareImpl implements ResourceLoaderAware
{
private ResourceLoader resourceLoader;
public void setResourceLoader(ResourceLoader resourceLoader)
{
System.out.println(
"setResourceLoader(ResourceLoader resourceLoader) is called "
+ "by the Spring Container");
this.resourceLoader = resourceLoader;
}
public void displayFileInfo()
{
Resource resource = resourceLoader.getResource("classpath:names.txt");
try (
BufferedReader br = new BufferedReader(
new FileReader(resource.getFile().getPath())))
{
String thisLine = null;
System.out.println("Names from the files are..");
while ((thisLine = br.readLine()) != null)
{
System.out.println(thisLine);
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
applicationContext.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
<bean id="resourceLoaderAware" class="com.ram.aware.ResourceLoaderAwareImpl" />
</beans>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
<bean id="resourceLoaderAware" class="com.ram.aware.ResourceLoaderAwareImpl" />
</beans>
App.java
package com.ram.core;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.ram.aware.ResourceLoaderAwareImpl;
public class App
{
public static void main(String[] args)
{
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(
"applicationContext.xml");
ResourceLoaderAwareImpl resourceLoaderAwareImpl = applicationContext
.getBean("resourceLoaderAware", ResourceLoaderAwareImpl.class);
System.out.println("resourceLoaderAwareImpl = "+resourceLoaderAwareImpl);
resourceLoaderAwareImpl.displayFileInfo();
applicationContext.close();
}
}
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.ram.aware.ResourceLoaderAwareImpl;
public class App
{
public static void main(String[] args)
{
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(
"applicationContext.xml");
ResourceLoaderAwareImpl resourceLoaderAwareImpl = applicationContext
.getBean("resourceLoaderAware", ResourceLoaderAwareImpl.class);
System.out.println("resourceLoaderAwareImpl = "+resourceLoaderAwareImpl);
resourceLoaderAwareImpl.displayFileInfo();
applicationContext.close();
}
}
Output
Aug 13, 2018 9:46:49 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@5b37e0d2: startup date [Mon Aug 13 09:46:49 IST 2018]; root of context hierarchy
Aug 13, 2018 9:46:49 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [applicationContext.xml]
setResourceLoader(ResourceLoader resourceLoader) is called by the Spring Container
resourceLoaderAwareImpl = com.ram.aware.ResourceLoaderAwareImpl@5c7fa833
Names from the files are..
Peter
Ram
Juli
Aug 13, 2018 9:46:50 AM org.springframework.context.support.AbstractApplicationContext doClose
INFO: Closing org.springframework.context.support.ClassPathXmlApplicationContext@5b37e0d2: startup date [Mon Aug 13 09:46:49 IST 2018]; root of context hierarchy
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@5b37e0d2: startup date [Mon Aug 13 09:46:49 IST 2018]; root of context hierarchy
Aug 13, 2018 9:46:49 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [applicationContext.xml]
setResourceLoader(ResourceLoader resourceLoader) is called by the Spring Container
resourceLoaderAwareImpl = com.ram.aware.ResourceLoaderAwareImpl@5c7fa833
Names from the files are..
Peter
Ram
Juli
Aug 13, 2018 9:46:50 AM org.springframework.context.support.AbstractApplicationContext doClose
INFO: Closing org.springframework.context.support.ClassPathXmlApplicationContext@5b37e0d2: startup date [Mon Aug 13 09:46:49 IST 2018]; root of context hierarchy
Click the below link to download the code:
https://sites.google.com/site/ramj2eev2/java_basics/SpringDemo_ResourceLoaderAware.zip?attredirects=0&d=1
Github Link:
https://github.com/ramram43210/javaee/tree/master/Spring_2018/SpringDemo_ResourceLoaderAware
Bitbucket Link:
https://bitbucket.org/ramram43210/spring/src/d89cccdb22c06b2e0a9adbdbd2c6a120a0f41423/Spring_2018/SpringDemo_ResourceLoaderAware/?at=master
See also:
No comments:
Post a Comment