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