/*
 * Copyright 2002-2018 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.context;

import org.springframework.beans.factory.Aware;
import org.springframework.core.io.ResourceLoader;

Interface to be implemented by any object that wishes to be notified of the ResourceLoader (typically the ApplicationContext) that it runs in. This is an alternative to a full ApplicationContext dependency via the ApplicationContextAware interface.

Note that Resource dependencies can also be exposed as bean properties of type Resource, populated via Strings with automatic type conversion by the bean factory. This removes the need for implementing any callback interface just for the purpose of accessing a specific file resource.

You typically need a ResourceLoader when your application object has to access a variety of file resources whose names are calculated. A good strategy is to make the object use a DefaultResourceLoader but still implement ResourceLoaderAware to allow for overriding when running in an ApplicationContext. See ReloadableResourceBundleMessageSource for an example.

A passed-in ResourceLoader can also be checked for the ResourcePatternResolver interface and cast accordingly, to be able to resolve resource patterns into arrays of Resource objects. This will always work when running in an ApplicationContext (the context interface extends ResourcePatternResolver). Use a PathMatchingResourcePatternResolver as default. See also the ResourcePatternUtils.getResourcePatternResolver method.

As alternative to a ResourcePatternResolver dependency, consider exposing bean properties of type Resource array, populated via pattern Strings with automatic type conversion by the bean factory.

Author:Juergen Hoeller, Chris Beams
See Also:
Since:10.03.2004
/** * Interface to be implemented by any object that wishes to be notified of * the <b>ResourceLoader</b> (typically the ApplicationContext) that it runs in. * This is an alternative to a full ApplicationContext dependency via the * ApplicationContextAware interface. * * <p>Note that Resource dependencies can also be exposed as bean properties * of type Resource, populated via Strings with automatic type conversion by * the bean factory. This removes the need for implementing any callback * interface just for the purpose of accessing a specific file resource. * * <p>You typically need a ResourceLoader when your application object has * to access a variety of file resources whose names are calculated. A good * strategy is to make the object use a DefaultResourceLoader but still * implement ResourceLoaderAware to allow for overriding when running in an * ApplicationContext. See ReloadableResourceBundleMessageSource for an example. * * <p>A passed-in ResourceLoader can also be checked for the * <b>ResourcePatternResolver</b> interface and cast accordingly, to be able * to resolve resource patterns into arrays of Resource objects. This will always * work when running in an ApplicationContext (the context interface extends * ResourcePatternResolver). Use a PathMatchingResourcePatternResolver as default. * See also the {@code ResourcePatternUtils.getResourcePatternResolver} method. * * <p>As alternative to a ResourcePatternResolver dependency, consider exposing * bean properties of type Resource array, populated via pattern Strings with * automatic type conversion by the bean factory. * * @author Juergen Hoeller * @author Chris Beams * @since 10.03.2004 * @see ApplicationContextAware * @see org.springframework.beans.factory.InitializingBean * @see org.springframework.core.io.Resource * @see org.springframework.core.io.support.ResourcePatternResolver * @see org.springframework.core.io.support.ResourcePatternUtils#getResourcePatternResolver * @see org.springframework.core.io.DefaultResourceLoader * @see org.springframework.core.io.support.PathMatchingResourcePatternResolver * @see org.springframework.context.support.ReloadableResourceBundleMessageSource */
public interface ResourceLoaderAware extends Aware {
Set the ResourceLoader that this object runs in.

This might be a ResourcePatternResolver, which can be checked through instanceof ResourcePatternResolver. See also the ResourcePatternUtils.getResourcePatternResolver method.

Invoked after population of normal bean properties but before an init callback like InitializingBean's afterPropertiesSet or a custom init-method. Invoked before ApplicationContextAware's setApplicationContext.

Params:
  • resourceLoader – the ResourceLoader object to be used by this object
See Also:
/** * Set the ResourceLoader that this object runs in. * <p>This might be a ResourcePatternResolver, which can be checked * through {@code instanceof ResourcePatternResolver}. See also the * {@code ResourcePatternUtils.getResourcePatternResolver} method. * <p>Invoked after population of normal bean properties but before an init callback * like InitializingBean's {@code afterPropertiesSet} or a custom init-method. * Invoked before ApplicationContextAware's {@code setApplicationContext}. * @param resourceLoader the ResourceLoader object to be used by this object * @see org.springframework.core.io.support.ResourcePatternResolver * @see org.springframework.core.io.support.ResourcePatternUtils#getResourcePatternResolver */
void setResourceLoader(ResourceLoader resourceLoader); }