The ResourceLoaderAware interface is a special callback interface that identifies components that accept a reference to the ResourceLoader that is provided to them. The following listing shows the definition of the ResourceLoaderAware interface:

public interface ResourceLoaderAware {
    void setResourceLoader(ResourceLoader resourceLoader);
}

If a class implements ResourceLoaderAware and is deployed in an application context (as a managed Spring bean), it is recognized as ResourceLoaderAware by the application context. The application context then calls setResourceLoader(ResourceLoader), providing itself as an argument (remember that all application contexts in Spring implement the ResourceLoader interface).

Because ApplicationContext is a ResourceLoader, the bean can also implement the ApplicationContextAware interface and use the provided application context directly to load resources. However, in general, it's better to use the specialized ResourceLoader interface if that's all you need. The code will only be associated with the resource loading interface (which can be considered a service interface), and not with the entire Spring ApplicationContext interface.

Application components can also rely on ResourceLoader automatic discovery and binding as an alternative to implementing the ResourceLoaderAware interface. Traditional auto-detection and binding modes constructor and byType are capable of providing a ResourceLoader for either a constructor argument or a setter parameter, respectively. For greater flexibility (including the ability to auto-discover and link fields and methods with multiple parameters), consider using annotation-based auto-discovery and linking features. In this case, ResourceLoader is automatically discovered and associated with a field, constructor argument, or method parameter that expects a ResourceLoader type if the field, constructor, or method contains the @Autowired annotation.

To load one or more Resource objects for a resource path that contains wildcards or uses a special resource prefix classpath*:, instead of ResourceLoader, an instance of ResourcePatternResolver should be associated with application components.