Spring把文件,二进制流统称为资源。Spring改价了访问资源的策略,它提供了一个Resource接口,该接口提供了更强的资源访问能力,Spring架构本身大量使用了Resource来访问底层数据。
getInputStream方法能够定位并打开资源,返回资源对应的输入流。每次调用都返回新的输入流。调用者必须负责关闭输入流。
exists返回所指向文件是否存在。
isOpen返回资源是否打开。有些资源读取结束必须关闭,以防止资源泄露。
getDescription返回资源的描述信息。
getFile返回资源对应的File对象。
getURL返回资源对应的URL对象。最后两个是传统的方式,仅仅在简单方式访问受阻时才用。
此接口并没有任何资源访问实现逻辑。而对于不同资源,架构也提供了不同的resource实现类。并且Resource可以独立于Spring架构使用。虽然这里面也有接口与实现类的耦合,但这是指工具类的耦合,代码污染很小。
Resource实现类
- UrlResource:访问网络资源的实现类
- ClassPathResource:访问类加载路径里资源的实现类
- FileSystemResource:访问文件系统里资源的实现类
- ServletContextResource:访问相对于ServletContext路径下的资源的实现类
- InputStreamResource:访问输入流资源的实现类
- ByteArrayResource:访问字节数组资源的实现类
访问类加载路径下资源
ClassPathResource cr=new ClassPathResource("book.xml");
此处是手动创建。更多的时候架构能够在执行某个方法时,接受一个代表资源路径的字符串参数,参数有classpath前缀时,会自动创建ClassPathResource对象。
ResourceLoader接口和ResourceLoaderAware接口
时间: 2024-12-18 22:15:18