Spring揭秘(六)——Spring IoC容器ApplicationContext

Spring IoC容器ApplicationContext

ApplicationContext是较BeanFactory更为先进的容器,有一些特有的特性,即国际化信息支持、统一资源加载策略及容器内事件发布等。


统一资源加载策略

  1. spring框架内部使用org.springframework.core.io.Resource接口作为所有资源的抽象和访问接口。
    Resource接口可以根据资源的不同类型,或者资源所处的不同场合,给出相应的具体实现。Spring框架在这个理念的基础上,提供了一些实现类。

    • ByteArrayResource。将字节数组提供的数据作为一种资源进行封装。
    • ClassPathResouce。该实现从Java应用程序的ClassPath中加载具体资源并进行封装,可以使用指定的类加载器或者给定的类进行资源加载。
    • FileSystemResource。对java.io.File类型的封装,所以,我们可以以文件或URL的形式对该类型资源进行访问。
    • UrlResource。通过java.net.URL进行的具体资源查找定位的实现类,内部委派URL进行具体的资源操作。
    • InputStreamResource。将给定的InputStream视为一种资源的Resource实现类,较为少用。
  2. ResourceLoader,”更广义的URL”
    资源是有了,但如何去查找和定位资源,则应该是ResourceLoader的职责所在了。

    • 可用的ResourceLoader
      1. DefaultResourceLoader
        改类的默认资源查找处理逻辑如下:
        首先检查资源路径是否以classpath:前缀打头,如果是,则尝试构造ClassPathResource类型资源并返回。
        否则,尝试通过URL,根据资源路径来定位资源,如果没有抛出MalformedURLException,则会构造UrlResource类型的资源并返回;如果还是无法根据资源路径定位指定的资源,则委派getResourceByPath(String)方法来定位,构造ClassPathResource类型的资源并返回。
      2. FileSystemResourceLoader
        从文件系统加载资源并以FileSystemResource类型返回。

ApplicationContext和ResourceLoader

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值