ResourceLoaderAware
是特殊的标记接口,它希望拥有一个ResourceLoader
引用的对象。
public interface ResourceLoaderAware { void setResourceLoader(ResourceLoader resourceLoader); }
当实现了 ResourceLoaderAware
接口的类部署到application context(比如受Spring管理的bean)中时,它会被application context识别为 ResourceLoaderAware
。
接着application context会调用setResourceLoader(ResourceLoader)
方法,并把自身作为参数传入该方法(记住,所有Spring里的application context都实现了ResourceLoader
接口)。
既然 ApplicationContext
就是ResourceLoader
,那么该bean就可以实现 ApplicationContextAware
接口并直接使用所提供的application context来载入资源,但是通常更适合使用特定的满足所有需要的
ResourceLoader
实现。
这样一来,代码只需要依赖于可以看作辅助接口的资源载入接口,而不用依赖于整个Spring ApplicationContext
接口。
从Spring 2.5开始, 你可以使用ResourceLoader
的自动装配来代替实现 ResourceLoaderAware
接口。“传统的” constructor
及 byType
的自动装配模式 (第 3.3.5 节 “自动装配(autowire)协作者”已有论述)现在可以分别为构造方法参数及setter方法参数提供 ResourceLoader
类型的依赖。请使用新式的基于注解的自动装配特性以提供更大的灵活性(包括装配属性及多个方法参数的能力)。在这种情况下,只要属性、构造方法或者方法被 @Autowired
注解修饰,ResourceLoader
就会被装配到需要ResourceLoader
类型的属性、构造方法参数或者方法参数中。请查看章节 第 3.11.1 节 “@Autowired
”以了解进一步的信息。