从零开始的实习——Spring——ApplicationContext(暂时跳过)
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);