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】

推薦閱讀