名师讲坛:Spring实战开发(Redis+SpringDataJPA+SpringMVC+SpringSecurity)
上QQ阅读APP看书,第一时间看更新

4.3 ResourceLoader接口

在Spring设计的时候,已经明确地将所有资源统一规划为由Resource接口对象负责读取。但在使用过程中却需要面临一个问题,也是Spring设计中强调的一个核心思想——解耦合。之前编写的代码都直接采用了子类为父接口实例化的模式来处理,很明显这样的设计是不合理的。为了解决Resource读取不同资源的问题,专门又提供了一个org.springframework.core.io.ResourceLoader接口。该接口提供两个处理方法,如表4-2所示。

表4-2 ResourceLoader接口方法

通过表4-2可以发现,ResourceLoader接口中提供的getResource方法可以直接返回Resource接口实例,关系如图4-2所示。最关键的是,在调用此方法时可以通过字符串传递访问路径。常用的访问路径标记如表4-3所示。

表4-3 资源定位

图4-2 ResourceLoader结构

1.【mldnspring-base模块】通过ResouceLoader读取文件资源。

本程序使用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中包含了更多的处理信息。