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

  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来使用。

时间: 2025-01-31 12:32:32

《Spring揭秘》(十) ---- ApplicationContext之统一资源加载策略的相关文章

cocos creator基础-(二十四)cc.Director与资源加载策略

1: 了解creator场景切换; 2: 了解director基本的一些接口; 3: 理解资源加载的策略; cc.Director对象 1:游戏里面控制管理整个游戏全局对象,包括了场景切换等,为cc.Director对象; 2:导演对象全局只有一个cc.director,大写的为类, 小写的cc.director为全局的导演对象; 3: cc.director来获取导演对象实例; 4: 游戏中各种管理对象都可以通过cc.director获取,比如物理引擎管理,Action管理, 碰撞检测管理等;

最新版本cocos2d­2.0­x­2.0.2使用新资源加载策略!不再沿用-hd、-

 前段时间cocos2dx更新了最新版本cocos2d-2.0-x-2.0.2,也从这个版本开始对于资源加载与管理都改变了策略. 在之前的加载方式都是通过沿用与cocos2d-iphone一样的加载资源方式,对于图片名后添加-hd,-ipad,-ipadhd方式,当用户开启项目的高清视网膜后就可以默认寻找对应的资源.但是从cocos2d-2.0-x-2.0.2版本开始,资源加载策略不在如此了.对跨平台整合不清楚的请看cocos2dx最新2.x版本跨平台整合NDK+Xcode 最新资源加载策略

《Spring揭秘》——IOC梳理3(资源加载,国际化)

资源访问 JDK提供的访问资源的类并不能很好的满足各类资源访问需求,Spring提供了Resource接口以实现更强大的访问底层资源的能力. Resource具体实现类: ByteArrayResource :二进制数组表示的资源,二进制数组资源可以在内存中通过持续构造: ClassPathResource :类路径下的资源,资源以相对于类路径的方式表示: FileSystemResource :文件系统资源,资源以文件系统路径的方式表示: UrlResource :封装了java.net.UR

Unity3D之Mecanim动画系统学习笔记(十):Mecanim动画的资源加载相关

资源加载是必备的知识点,这里就说说Mecanim动画的资源如何打包及加载. 注意,Unity4.x和Unity5.x的AssetBundle打包策略不一样,本笔记是基于Unity4.x的AssetBundle进行打包的. 我们一般使用FBX类型的模型及动画文件,而动画文件的储存一般有两种情况,一是所有的动画和模型都一起存放到一个文件中,还有一种情况是模型单独一个文件而动画单独一个文件.这里我们就两种情况都看一下. 使用的资源是Unity3D自带的以及从一本教材中取出的两种类型的动画资源,同时需要

spring源码阅读之Bean的加载(二)

在正式分析源码之前,先来了解一下SpringBeans里面最核心的两个类  DefaultListableBeanFactory XMLBean继承自 DefaultListableBeanFactory,而 DefaultListableBeanFactory是整个Bean加载的核心部分,是Sprin注册及加载Bean的默认实现,而对于XmlBeanFactory与 DefaultListableBeanFactory不同的地方其实就是在XmlBeanFactory中使用了自定义的XML读取器

也许是被误解的浏览器资源加载优化

几乎每一个前端程序员都知道应该把script标签放在页面底部.关于这个经典的论述可以追溯到Nicholas的 High Performance Javasript 这本书的第一章Loading and Execution中,他之所以建议这么做是因为: Put all <script> tags at the bottom of the page, just inside of the closing </body> tag. This ensures that the page c

【让我们再聊聊浏览器资源加载优化】

几乎每一个前端程序员都知道应该把script标签放在页面底部.关于这个经典的论述可以追溯到Nicholas的 High Performance Javasript 这本书的第一章Loading and Execution中,他之所以建议这么做是因为: Put all <script> tags at the bottom of the page, just inside of the closing </body> tag. This ensures that the page c

[转]让我们再聊聊浏览器资源加载优化

作者 李光毅 发布于 2014年6月27日 几乎每一个前端程序员都知道应该把script标签放在页面底部.关于这个经典的论述可以追溯到Nicholas的 High Performance Javasript 这本书的第一章Loading and Execution中,他之所以建议这么做是因为: Put all <script> tags at the bottom of the page, just inside of the closing </body> tag. This e

Unity3d热更新全书-资源加载(一)从AssetBundle说起

Unity3D动态下载资源,有没有解?有,AssetBundle就是通用解,任何一本书都会花大幅篇章来介绍AssetBundle. 我们也来说说AssetBundle 我们试全面的分析一下Unity3D提供的资源加载机制 1.Resources//内嵌资源,使用方法Resources.Load,可以加载任意种类的资源,不能动态修改,卒. 2.StreamingAssets//随包资源,使用方法IO或WWW.Load.WWW.Load可以加载任意种类资源,IO仅限bytes 和 text. 3.W