且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

SPRIN06_源码之核心组件接口BeanDefinition、Debug创建流程、流程图总结(五)

更新时间:2022-07-01 18:48:06

  • ⑧. 反正现在就是一句话:ioc容器里面有的东西,直接ioc容器传给BeanDefinitionReader慢慢用去


  • ⑨. 然后加载指定配置文件的bean的定义信息,就是利用ResourcePatternResolver资源解析器去加载指定配置文件的所有内容


SPRIN06_源码之核心组件接口BeanDefinition、Debug创建流程、流程图总结(五)


⑩. 然后上来加载所有bean的配置,然后它在这递归调用–loadBeanDefinitions,然后这个loadBeanDefinitions方法里面创建EncodedResource–new EncodedResource(resource) 把resource包装了一下传给了EncodedResource,这就是一个装饰模式


    /**
       * Load bean definitions from the specified XML file.
       * @param resource the resource descriptor for the XML file
       * @return the number of bean definitions found
       * @throws BeanDefinitionStoreException in case of loading or parsing errors
       */
      @Override
      public int loadBeanDefinitions(Resource resource) throws BeanDefinitionStoreException {
        return loadBeanDefinitions(new EncodedResource(resource));
      }


⑩①. EncodedResource是一个InputStreamSource,它把原生的Resource一包装,返回了一个InputStreamSource,这是一个适配器模式


SPRIN06_源码之核心组件接口BeanDefinition、Debug创建流程、流程图总结(五)


SPRIN06_源码之核心组件接口BeanDefinition、Debug创建流程、流程图总结(五)


⑩②. 连接了两个不同的接口,它把Spring底层规定的resource接口最终能跟InputStreamSource来进行对接,因为在底层能够看到所有真正调用方法的时候,它在这会调用resource的方法–如上图,而因为这个原生的这个流InputStream是spring定义的流,而这个InputStream流又包装成了InputStreamReader流,而这个InputStreamReader就方便多了,读取文件的内容肯定要一次读取一行,而不是读一个一个字节,所以这个InputStreamReader会有相应的编码器StreamDecoder,而这个编码器来进行帮忙读取,还要进行边解码StreamDecoder(如下图所示)


SPRIN06_源码之核心组件接口BeanDefinition、Debug创建流程、流程图总结(五)


SPRIN06_源码之核心组件接口BeanDefinition、Debug创建流程、流程图总结(五)