
InputStreamSource封装任何能返回InputStream的类,比如File、ClassPath下的资源和Byte Array等。它只有一个方法定义:getInputStream(),该方法返回一个新的InputStream对象。 Resource接口抽象了所有Spring内部使用到的底层资源:File、URL、ClassPath等。对不同来源的资源文件都有对应的Resource实现:文件(FileSystemResource)、ClassPath资源(ClassPathResource)、URL资源(URLResource)、InputStream资源(InputStreamResource)、Byte数组(ByteArrayResource)等。 当通过Resource相关类完成对配置文件的封装后配置文件的读取工作就全权交给XmlBeanDefinitionReader来处理了。 在将配置文件封装为Resource类型的实例后即可使用Resource实例作为构造函数的参数进行构造XmlBeanFactory。
加载bean XmlBeanFactory构造函数中调用了XmlBeanDefinitionReader类型的reader属性提供的方法this.reader.loadBeanDefinitions(resource),而这句代码则是整个资源加载的切入点,之后的流程大致如下: (1)封装资源文件。当进入XmlBeanDefinitionReader后首先对参数Resource使用EncordedResource类进行封装。 (2)获取输入流。从Resource中获取对应的InputStream并构造InputSource (3)通过构造的InputSource实例和Resouce实例继续调用函数doLoadBeanDefinition。