spring中对资源的读取提供有自己的新方案,比传统IO操作更加智能方便。
对于所有的资源处置,spring提供了Resource接口,该接口中的方法都是通过其父接口InputStreamSource实现的。该接口有四个常用子类,通过这四个子类实现资源获取:
ClassPathResource、FileSystemResource、UrlResource、ByteArrayResource。
这四个子类中最重要的是ClassPathResource,是用来读取classpath下的资源文件:
此时可以发现,我们这样都是通过子类直接实例化父接口,而这样就违反了spring的Ioc&DI技术的理念,为了解决这样产生的耦合性问题,提供了ResourceLoader接口。用来实现接口对象的实例化。而ResourceLoader接口中提供有一个资源的加载方法:getResource() ;,在读取资源之前需要在资源定位上使用一些特殊的标记,来区分资源类型:
文件资源:fill:路径
网络资源:http://路径
ClassPath资源:classpath:路径
而获取资源中最为重要的是获取ClassPath下的资源:
这个时候虽然避免了获取资源时使用关键字new,但是在定义资源加载器(ResourceLoader)的时候还是使用到了new,这个时候最好的做法是将资源利用配置文件进行注入,再交给容器管理。
以下为重点:
【spring-base】创建一个专门读取资源的Bean对象:
【spring-base】在spring-base.xml中配置该类的bean对象。
这样将实例化对象交给spring容器,避免了产生耦合:
对于资源,一般读取的不是某个资源,而是某一类资源,这样就需要使用到路径通配符:
? 0或1位任意字符
* 0或1或n位任意字符
** 匹配任意的字符
【spring-base】修改spring-base.xml