文章目录
2.4 Resourceloader
ResourceLoader 接口被用来加载实现了Resource
接口的实例。
接口定义
所有应用程序上下文都实现ResourceLoader接口。因此,所有应用程序上下文都可用于获取Resource实例。
当您在特定的应用程序上下文中调用getResource(),并且指定的位置路径没有特定的前缀时,您将获得适合该特定应用程序上下文的Resource类型。例如,假定针对ClassPathXmlApplicationContext实例执行了以下代码片段:
针对ClassPathXmlApplicationContext,该代码返回ClassPathResource。如果对FileSystemXmlApplicationContext实例执行了相同的方法,则它将返回FileSystemResource。对于WebApplicationContext,它将返回ServletContextResource。类似地,它将为每个上下文返回适当的对象。
结果,您可以以适合特定应用程序上下文的方式加载资源。
另一方面,您也可以通过指定特殊的classpath:前缀来强制使用ClassPathResource,而与应用程序上下文类型无关,如下例所示:
2.5 The ResourceLoaderAware interface
ResourceLoaderAware 接口可以提供ResourceLoader实例,实现它即可。
发现机制
当类实现ResourceLoaderAware并部署到应用程序上下文中(作为Spring托管的bean)时,该类被应用程序上下文识别为ResourceLoaderAware。然后,应用程序上下文调用setResourceLoader(ResourceLoader),将自身作为参数提供(请记住,Spring中的所有应用程序上下文均实现ResourceLoader接口)。
推荐使用
由于ApplicationContext是ResourceLoader,因此Bean也可以实现ApplicationContextAware接口,并直接使用提供的应用程序上下文来加载资源。但是,通常,如果需要的话,最好使用专门的ResourceLoader接口。该代码将仅耦合到资源加载接口(可以视为实用程序接口),而不耦合到整个Spring Applic