从零开始的实习——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内统一资源加载策略的真相。
从零开始的实习——Spring——ApplicationContext(暂时跳过)

作为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);