资源访问 - Resource

对于JAVA来说,资源访问通常有java,net.URL和文件IO流来完成,如果需要访问来自网络的资源时,通常选择URL类,可是URL类目前还无法在类加载路径或者相对于ServletContext的路径中访问资源。虽然可以使用特定的URL前缀注册新的处理类,但是这样做通常比较复杂,而且URL接口还缺少一些有用的功能,比如检查所指向的资源是否存在等。

Spring提供了一个Resource接口,该接口是所有资源访问类所实现的接口,该接口主要提供了如下几个方法:

    getInputStream():定位并且打开资源,返回资源对应的输入流,每次调用都会返回新的输入流,调用者必须负责关闭输入流
    isOpen():返回资源文件是否打开,如果资源文件不能多次读取,每次读取结束时应该显示关闭,以防止资源泄露
    exists():返回Resource所指向的资源是否存在
    getDescription():返回资源的描述信息,用于资源处理出错时输出该信息,通常是全限定文件名或者实际URL
    getFile():返回资源对应的File对象
    getURL():返回资源对应的URL对象

Resource接口是Spring资源访问的接口,具体的资源访问由该接口的实现类完成。Spring提供了Resource接口的大量实现类:

    UrlReource:访问网络资源的实现类
    ClassPathResource:访问类加载路径里资源的实现类
    FileSystemResource: 访问文件系统里的资源的实现类
    ServletContextResource:访问相对于ServletContext路径下的资源的实现类,通常在WEB应用中使用
    InputStreamResource:访问输入流资源的实现类
    ByteArrayResource:访问字节数组资源的实现类

Spring提供如下两个标识性接口:

    1>ResourceLoader:该接口实现类的实例可以获得一个Resource实例,该接口里有如下方法:   Resource getResource(String location):该接口仅包含这个方法,该方法用于返回一个Resource实例。ApplicationContext的实现类都实现了ResourceLoader接口,因此ApplicationContext直接获取Resource实例
    2>ResourceLoaderAware:该接口实现类的实例将获得一个ResourceLoader的引用。该接口包含一个方法:void setResourceLoader(ResourceLoader resourceLoader);该方法用于设置一个ResourceLoader实例。实现该接口的类之后,可以配置成Bean实例,我们不需要为该setter方法显式<property />设置参数传递,Spring容器会自动检测到实现ResourceLoaderAware接口的Bean类然后自动将自动传递给该参数作为ResourceLoader引用。

使用ResourceLoaderAware接口示例:

public class Simple implements ResourceLoaderAware {
    private ResourceLoader resourceloader ;
    @Override
    public void setResourceLoader(ResourceLoader resourceLoader) {
        this.resourceLoader = resourceLoader ;
    }
    public ResourceLoader getResourceLoader() {
        return resourceLoader ;
    }
}

//配置Spring.xml
<beans ...>
    <bean id="simple" class="Simple" />
</beans>

//测试主程序
public class test {
    public static void main(String[] args) {
        ApplicationContext act = new ClassPathXmlApplicationContext("Spring.xml") ;
        Simple simple = acr.getBean("simple",Simple.class) ;
        //检测Spring容器是否自动传入ResourceLoader属性值
        ResourceLoader rl = simple.getReourceLoader() ;
        //控制台输出:true
        System.out.println("Spring容器是否将自身传入成ResourceLoader值?: + (rl == act)) ;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值