Spring 深入——IoC 容器 02( 三 )


实际上 Spring 针对不同类型的 Resource 都准备了对应的实现类,方便我们针对不同场景进行合适的使用,不同的 ApplicationContext 会对应生成其他的 Resource:ClassPathResource、ServletContextResource 等,而且 Resource 接口本身就是继承了 InputStreamSource (这个抽象类唯一的方法是返回一个 InputStream) , 定义了很多的 I/O 相关的操作,其实现类也主要是针对不同的资源类型做出合适的实现 。
小结:通过 FileSystemXmlApplicationContext 这个 AC 实现原理为例子,初步的了解了 Resource 定位的解决方案,就是通过调用 getResourceByPath() 方法,重写了父类 DefaultResourceLoader 的方法,最后得到了 FileSystemResource 这个类型的 Resource 的定位实现 。那么此时这个 Resource 的定位过程已经完成,为 BeanDefinition 的载入创造了 I/O 操作的条件,但是具体的数据还没开始读入 。读入就是 BeanDefinition 的载入和解析过程了 。
其实 Resource 就是统一了资源的定义,各种 BeanDefinition 定义的资源(File,URL , XML...)都统一抽象成 Resource , 所有实现类都需要实现相关的 I/O 操作 。
而 ResourceLoader 就是根据某种匹配方式来创建匹配的 Resource,并返回 。
将其过程多捋几遍 , 初步理解其 BeanDefinition 的资源定位过程 。下一步就是 BeanDefinition 的载入和解析过程 。
【Spring 深入——IoC 容器 02】

推荐阅读