上期講了Spring IoC
的refresh
函數,詳情請見探索SpringBoot-一塊兒看看Spring核心源碼之refresh(九),今天暫時緩一緩,畢竟後面的知識還得好好理一理。以前用力過猛,咱們還得打牢固一些基礎知識。好比在看refresh
函數源代碼的過程當中,不知道你有沒有發現全部的Spring
的資源都是經過Resource
來訪問的。Spring
會先將全部的資源轉化爲特定的Resource
對象,以後纔會對其訪問。那麼這個Resource
究竟是什麼呢?html
通常,咱們啓動IoC
容器的時候是下面這樣的。java
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("META-INF/context.xml");
複製代碼
即便咱們不看源代碼,咱們也可以知道對於META-INF/context.xml
,Spring
內部必定會有一個根據這個地址獲取實際的XML
文件的信息的代碼。bash
那麼Spring
具體是怎麼作到的呢?函數
答案就是使用Resource
。在Spring
內部的全部資源,包括File,ClassPath,URL都會轉化爲Resource
統一對外提供服務。post
好比上面這個最簡單在refresh
函數的過程當中是這麼轉化的。url
Resource[] resources = ((ResourcePatternResolver) resourceLoader).getResources(location);
複製代碼
沒錯,很明顯,雖然咱們不知道resourceLoader
是幹嗎的。可是,這段代碼也很是容易理解,就是把location
下面的XML
文件轉化爲了Resource
資源。spa
由於在Java
中傳統的訪問資源的方式是經過URL
來抽象的。若是不記得URL
抽象了,請翻一翻大學時候的Java
基礎教材。通常是這樣來使用的。設計
URL url = new URL("http://www.runoob.com/index.html?language=cn#j2se");
System.out.println("URL 爲:" + url.toString());
複製代碼
那麼若是要獲取相對於classpath
下面的文件呢?傳統的Java
是怎麼作的呢?首先第一步是要得到URL
,以後才能獲取這個URL
中存在的文件。以後才能用File
對象來包裝生成。code
URL url = LearnResource.class.getClassLoader().getResource("meta-inf/context.xml");
System.out.println(url.getFile());
File file = new File(url.getFile());
System.out.println(file.exists());
複製代碼
因此,直接使用URL
得到classpath
下面的資源仍是比較複雜的。cdn
另外,對於URL
抽象來講,也沒有提供一些基本的方法。好比,檢查當前資源是否存在、檢查當前資源是否可讀等方法都是沒有。
所以,Spring
使用到本身的Resource
來對上述classpath
下面的文件的訪問進行了一次封裝。
有了Resource
以後,那麼能夠的怎麼訪問對應文件資源呢?一行搞定。是否是很簡單。
ClassPathResource classPathResource = new ClassPathResource("meta-inf/context.xml");
複製代碼
Spring
設計了Resource
接口對外暴露資源的全部的訪問方式。Resource
繼承了InputSteamSource
來提供getInputStream
方法來獲取InputStream
。 另外還提供了getFile
,exists
,isReadable
,getURL
等。
對於不一樣的資源路徑,來提供了不一樣的對象來對象訪問好比ClassPathResource
,FileSystemResource
來分別訪問類路徑下,文件系統路徑下的資源。
最後附上一張Resource
的繼承類圖。
想到一些以後繼續補充的點,一些ClassLoader
的具體的實現內容,能夠考慮再想一想,以後講解下。這篇仍是先基本的介紹下Resource
。
之後這裏天天都會寫一篇文章,題材不限,內容不限,字數不限。儘可能把本身天天的思考都放入其中。
若是這篇文章給你帶來了一些幫助,能夠動動手指點個贊,順便關注一波就更好了。
若是上面都沒有,那麼寫下讀完以後最想說的話?有效的反饋和你的鼓勵是對我最大的幫助。
另外打算把博客給從新撿起來了。歡迎你們來訪問吃西瓜。
我是shane。今天是2019年8月17日。百天寫做計劃的第二十四天,24/100。