2.6. ResourceLoaderAware接口

ResourceLoaderAware接口是一个特殊的回调接口,用于标识期望提供ResourceLoader引用的组件。以下清单显示了ResourceLoaderAware接口的定义:

public interface ResourceLoaderAware {

    void setResourceLoader(ResourceLoader resourceLoader);
}

当一个类实现ResourceLoaderAware并部署到应用程序上下文(作为 Spring 管理的 bean)中时,它被应用程序上下文识别为ResourceLoaderAware。然后应用程序上下文调用setResourceLoader(ResourceLoader),将自己作为参数提供(请记住,Spring 中的所有应用程序上下文都实现了该ResourceLoader接口)。

由于 ApplicationContext是一个 ResourceLoader,因此 bean 也可以实现 ApplicationContextAware接口并直接使用提供的应用程序上下文来加载资源。但是,一般来说,如果您只需要专用接口,最好使用ResourceLoader 专用接口。该代码将仅与资源加载接口(可以认为是实用程序接口)耦合,而不与整个 Spring ApplicationContext接口耦合。

在应用程序组件中,您还可以依赖 ResourceLoader 的自动装配作为实现ResourceLoaderAware接口的替代方法。传统的构造函数和 byType 自动装配模式(如自动装配协作者中所述)能够分别为构造函数参数或 setter 方法参数提供 ResourceLoader。为了获得更大的灵活性(包括自动装配字段和多个参数方法的能力),请考虑使用基于注解的自动装配功能。在这种情况下,只要相关字段、构造函数或方法带有 @Autowired 注解,ResourceLoader 就会自动装配到需要 ResourceLoader 类型的字段、构造函数参数或方法参数中。有关更多信息,请参阅使用@Autowired。

要为包含通配符或使用特殊classpath*:资源前缀的资源路径加载一个或多个 Resource 对象,请考虑将 ResourcePatternResolver 实例(而不是 ResourceLoader)自动装配到应用程序组件中。

最后更新于