![名师讲坛:Spring实战开发(Redis+SpringDataJPA+SpringMVC+SpringSecurity)](https://wfqqreader-1252317822.image.myqcloud.com/cover/156/29977156/b_29977156.jpg)
4.3 ResourceLoader接口
在Spring设计的时候,已经明确地将所有资源统一规划为由Resource接口对象负责读取。但在使用过程中却需要面临一个问题,也是Spring设计中强调的一个核心思想——解耦合。之前编写的代码都直接采用了子类为父接口实例化的模式来处理,很明显这样的设计是不合理的。为了解决Resource读取不同资源的问题,专门又提供了一个org.springframework.core.io.ResourceLoader接口。该接口提供两个处理方法,如表4-2所示。
表4-2 ResourceLoader接口方法
![](https://epubservercos.yuewen.com/5C1AE0/16499866905000506/epubprivate/OEBPS/Images/figer785.jpg?sign=1739156207-4GjfDro8aFV1pnrUDAbjgt1DhThvsszM-0-1681018c4d0731c289879c1a9fbd3365)
通过表4-2可以发现,ResourceLoader接口中提供的getResource方法可以直接返回Resource接口实例,关系如图4-2所示。最关键的是,在调用此方法时可以通过字符串传递访问路径。常用的访问路径标记如表4-3所示。
表4-3 资源定位
![](https://epubservercos.yuewen.com/5C1AE0/16499866905000506/epubprivate/OEBPS/Images/figer786.jpg?sign=1739156207-CO5mB8DCYoGAUXtA44NK4scb8FoTniBf-0-81eef072a305a49a6e5b7cf1a7eb94f5)
![](https://epubservercos.yuewen.com/5C1AE0/16499866905000506/epubprivate/OEBPS/Images/figer687.jpg?sign=1739156207-XQBlnIfAZJA3pasnLslbr8ScS7y6gHs7-0-c3af34d0882728738bf9226be7b513ee)
图4-2 ResourceLoader结构
1.【mldnspring-base模块】通过ResouceLoader读取文件资源。
![](https://epubservercos.yuewen.com/5C1AE0/16499866905000506/epubprivate/OEBPS/Images/figer688.jpg?sign=1739156207-KRaUGTzBF8ZhbfLjqeRR19Ka7mC7lr3Y-0-8dc788d496e805074cf54f1cfb65497f)
本程序使用DefaultResourceLoader子类为ResourceLoader接口进行实例化,随后通过file:d:/mldn.txt字符串实现了磁盘资源的加载。
2.【mldnspring-base模块】实现网络资源加载。
Resource resource = resourceLoader.getResource("http://localhost/mldn/mldn-data.txt") ;
3.【mldnspring-base模块】实现CLASSPATH资源加载。
Resource resource = resourceLoader.getResource("classpath:spring/spring-base.xml") ;
通过以上几种资源注入,可以发现整体设计中,在使用resourceloader接口获取资源时,将自动根据资源定位实现不同的读取,这样的处理不仅加强了字符串的功能,也避免了接口与子类之间的耦合。
提示:测试类中的配置文件加载。
对于Spring测试类,读者可以发现在类定义上使用了以下的注解:
@ContextConfiguration(locations = { "classpath:spring/spring-base.xml" })
此时采用的就是资源定位字符串实现的配置文件加载,可以说,正是Spring对资源访问的统一设计,才使得字符串在Spring中包含了更多的处理信息。