從零開始的實習——Spring——ApplicationContext(暫時先去看Spring實戰)
阿新 • • 發佈:2018-12-15
Spring中的Resource
Spring框架內部使用org.springframework.core.io.Resource介面作為所有資源的抽象和訪問介面,我們在之前構造BeanFactory的時候已經接觸過它,比如:
BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("..."));
其中ClassPathResource就是Resource的一個特定型別實現,代表的是位於ClassPath中的資源。
此外還有一些實現類(在org.springframework.core.io包下):
- ByteArrayResource:位元組陣列提供的資料進行封裝。
- ClassPathResource
- FileSystemResource:檔案或者URL型別的資源訪問。
- UrlResource
- InputStreamResource:較為少用,一般以ByteArrayResource替代。
ResourceLoader 如何去查詢和定位資源,就是ResourceLoader的職責所在。 任何的ApplicationContext繼承了RespurcePatternResolver,讓然就間接實現了ResourceLoader介面。這就是ApplicationContext支援Spring內統一資源載入策略的真相。
作為ResourceLoader的ApplicationContext
以ResourceLoader身份登場的ApplicationContext:
ResourceLoader resourceLoader = new ClassPathXmlApplicationContext("配置檔案路徑");
// 或者
// ResourceLoader resourceLoader = new FileSystemXmlApplicationContext("配置檔案路徑");
Resource fileResource = resourceLoader.getResource("D:/spring21site/README");
assertTrue(fileResource instanceof ClassPathResource);
assertFalse(fileResource.exists());
Resource urlResource2 = resourceLoader.getResource("http://www.spring21.cn");
assertTrue(urlResource2 instanceof UrlResource);