一、核心代码
* This implementation opens an InputStream for the given class path resource.
* @see java.lang.ClassLoader#getResourceAsStream(String)
* @see java.lang.Class#getResourceAsStream(String)
*/
public InputStream getInputStream() throws IOException {
InputStream is;
if (this.clazz != null) {
is = this.clazz.getResourceAsStream(this.path);
}
else {
is = this.classLoader.getResourceAsStream(this.path);
}
if (is == null) {
throw new FileNotFoundException(
getDescription() + " cannot be opened because it does not exist");
}
return is;
}
二、逻辑:
逻辑 写道
1.如果有传入一个类,将用该类的Class.getResourceAsStream来加载资源;
2.如果null则用ClassLoader来加载资源;
ClassLoader在ClassPathResource中已避免走它为null的情况,具体可以看构造方法,结合第一个分支判断。
说明:
1.Class.getResourceAsStream和ClassLoader.getResourceAsStream有区别。具体区别体现在Class.getResourceAsStream的name = resolveName(name);
2.ClassPathResource的public ClassPathResource(String path, ClassLoader classLoader)构造方法很有意思,可以看看;
三、 仔细研究可以有以下收获:
1.Java的ClassLoader知识体系;
2.Spring加载classpath资源的方式;
一些资料参考:
1.Java的ClassLoader知识体系:
http://zddava.iteye.com/blog/258900
http://blog.csdn.net/changewang/article/details/6107507
http://www.blogjava.net/lihuaxajh/articles/94371.html
http://blog.csdn.net/zhouysh/article/details/5889564
http://www.qqread.com/java/2010/03/w492173.html
2.Spring加载classpath资源的方式:
参考ClassPathResource和ClassUtils
分享到:
相关推荐
在Spring框架中,ClassPathResource是获取类路径资源的一个重要工具。它允许我们从类路径(classpath)中读取文件,如配置文件、属性文件等,这对于构建和管理Java应用程序非常有用。本篇文章将深入探讨如何使用Spring...
在Spring框架中,`ClassPathResource`是一个非常重要的类,用于加载类路径(classpath)下的资源文件,如XML配置文件。在实际开发中,我们经常需要从类路径中读取这些资源来初始化bean或其他配置。本示例将详细介绍...
在Java开发过程中,有时会遇到`FileNotFoundException`异常,特别是当涉及到Spring或Spring MVC框架时,这类问题尤为常见。`FileNotFoundException`通常表示系统试图打开或读取一个文件时,该文件在指定的位置并未...
这些路径是Spring Boot源码中定义的,默认加载文件的路径可以在 `CLASSPATH_RESOURCE_LOCATIONS` 数组中找到。 Classpath是Java应用程序中的一个概念,指的是Java应用程序加载资源文件和类文件的路径。Classpath...
Spring提供了多种`Resource`实现,例如`ClassPathResource`、`FileSystemResource`、`UrlResource`等,每种实现对应不同的资源定位策略。 1. `ClassPathResource`:用于访问类路径(classpath)下的资源。例如,...
4.3.2. ClassPathResource 4.3.3. FileSystemResource 4.3.4. ServletContextResource 4.3.5. InputStreamResource 4.3.6. ByteArrayResource 4.4. ResourceLoader 4.5. ResourceLoaderAware 接口 4.6. 把...
2. **ClassPathResource**:主要用于加载类路径(classpath)下的资源,特别适用于Web应用。它能自动查找`WEB-INF/classes`目录下的资源,无需指定协议。例如,`ClassPathResource cr = new ClassPathResource("book...
2. **ClassPathResource**:访问类路径中的资源,这对于访问位于jar包内部的资源非常有用。 3. **FileSystemResource**:访问文件系统中的资源,通常用于读取服务器本地的文件。 4. **ServletContextResource**:...
Spring提供了`ClassPathResource`类,可以用来加载类路径下的资源,包括jar包内的文件。例如,如果你的jar包名为`mylib.jar`,配置文件为`myconfig.xml`,你可以这样加载: ```java Resource resource = new Class...
- **正确设置路径**:在获取或下载资源时,应使用`ClasspathResource`或`ResourceLoader`来获取正确的类路径资源。例如: ```java Resource resource = new ClassPathResource("static/filename.ext"); ``` - *...
- 使用 `ClassPathResource` 类可以方便地从 classpath 中加载资源。 - 示例代码: ```java ClassPathResource resource = new ClassPathResource("file.txt"); InputStream inputStream = resource....
其次,ClassPathResource专门用于从类路径(classpath)中获取资源。它适用于那些需要从jar包或者项目类路径下读取配置文件或静态资源的情况。ClassPathResource实现了java.io解析,使得开发者可以方便地读取类路径...
- **Resource**的实现类包括但不限于`ByteArrayResource`、`BeanDefinitionResource`、`InputStreamResource`、`ClassPathResource`等。 **ResourceLoader接口** - **ResourceLoader**接口用于返回`Resource`对象...
// Resource resource = new ClassPathResource("appcontext.xml"); // BeanFactory factory = new XmlBeanFactory(resource); // 用classpath路径 // ApplicationContext factory = new ...
`ClassPathResource`、`FileSystemResource`和`UrlResource`是其常见实现,分别用于加载类路径、文件系统和URL路径的资源。 5. **文件系统访问**:Spring的`Resource`接口提供了读取、写入和复制文件的能力,例如`...
2. ClassPathResource:用于表示类路径(classpath)中的资源,如`new ClassPathResource("conf/file1.txt")`。这种方式常用于加载配置文件或资源文件,它根据给定的类路径位置来定位资源。 Resource接口提供了一些...
在某些情况下,可能需要自定义`ResourceLoader`或者使用`ClassPathResource`来更精确地定位资源。 总结起来,Spring提供了多种方式读取JAR内配置文件,包括`@PropertySource`、`@ConfigurationProperties`以及直接...
当遇到如`classpath:`或`file:`的前缀时,Spring会解析这些前缀并使用相应的加载策略来获取资源。对于`classpath:`,它会在类路径中查找;对于`file:`,它会尝试从文件系统中读取。 总的来说,`Resource`接口及其...
import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.type.classreading.MetadataReader; ...
Spring容器通过`ClassPathResource`加载配置文件,它可以从类路径(ClassPath)中查找资源。例如,如果我们把`applicationContext.xml`放在`com.test.factory`包下,我们可以这样加载: ```java ClassPathResource ...