《Spring》(十) ---- ApplicationContext之统一资源加载策略

本文深入解析Spring框架中Resource接口及其实现,包括ByteArrayResource、ClassPathResource等,并介绍ResourceLoader和ResourcePatternResolver接口如何帮助开发者查找和批量获取资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  Spring的resource

  Spring框架内部使用Resource接口作为所有资源的抽象和接口。例如: 

BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("..."));

  ClassPathResource就是Resource的一个特定类型的实现,代表的实位于Classpath中的资源。

  Resource接口可以根据资源的不同类型,或者资源所处的不同场合,给出相应的具体实现:

    a. ByteArrayResource  将字节(byte)数组提供的数据作为一种资源进行封装

    b. ClassPathResource  该实现从Java应用程序的ClassPath中加载具体资源并进行封装

    c. FileSystemResource  对java.io.File类型的封装,所以,我们可以以文件或者URL的形式对该类型资源进行访问,只要能跟File打的交道,基本上跟FileSystemResource也可以.

    d. UrlResource  通过java.net.URL进行的具体资源查找定位的实现类\

  如果以上资源还不能满足要求,可以根据相应场景给出自己的实现,只需实现Resource接口就是。

 

  ResourceLoader

  ResourceLoader的职责就是查找和定位资源。具体的资源查找定位策略由相应的ResourceLoader实现类给出。ResourceLoder定义如下:

public interface ResourceLoader {
    String CLASSPATH_URL_PREFIX = ResourceUtils.CLASSPATH_URL_PREFIX;
    Resource getResource(String location);
    ClassLoader getClassLoader();
}

 

  批量查找的ResourceLoader ---- ResourcePatternResolver

  ResourcePatternResolver则可以根据指定的资源路径匹配模式,每次返回多个Resource实例

  定义如下: 

public interface ResourcePatternResolver extends ResourceLoader {
    String CLASSPATH_ALL_URL_PREFIX = "classpath*:";
    Resource[] getResources(String locationPattern) throws IOException;
}

 

Resourcehe 和 ResourceLoader的层次图(摘自 http://www.jianshu.com/p/9cdd6d750216):

 

 

  

  ApplicationContext和ResourceLoader

  再回顾一下BeanFactory和ApplicationContext继承关系图: 

 

  ApplicationContext继承了ResourcePatternResolver,当然就间接实现了ResourceLoader接口。所以,然和的ApplicationContext实现都可以看作是一个ResourceLoader甚至是ResourcePatternResolver。而这就是ApplicationContext支持Spring内统一资源加载策略的真相。

  通常,所有的ApplicationContext实现类会直接或间接地继承AbstractApplicationContext,从下图可以看出ApplicationContext与ResourceLoader的所有关系

 

 所以AbstractApplication可以作为ResourceLoader和ResourcePatternResolver来使用。

转载于:https://www.cnblogs.com/IvySue/p/6485297.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值