`

spring_ClassPathResource中的获取classpath资源实现

 
阅读更多

一、核心代码

* 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获得bean对象

    在Spring框架中,ClassPathResource是获取类路径资源的一个重要工具。它允许我们从类路径(classpath)中读取文件,如配置文件、属性文件等,这对于构建和管理Java应用程序非常有用。本篇文章将深入探讨如何使用Spring...

    Spring实战之使用ClassPathResource加载xml资源示例

    在Spring框架中,`ClassPathResource`是一个非常重要的类,用于加载类路径(classpath)下的资源文件,如XML配置文件。在实际开发中,我们经常需要从类路径中读取这些资源来初始化bean或其他配置。本示例将详细介绍...

    解决异常FileNotFoundException:class path resource找不到资源文件的问题

    在Java开发过程中,有时会遇到`FileNotFoundException`异常,特别是当涉及到Spring或Spring MVC框架时,这类问题尤为常见。`FileNotFoundException`通常表示系统试图打开或读取一个文件时,该文件在指定的位置并未...

    spring boot加载资源路径配置和classpath问题解决

    这些路径是Spring Boot源码中定义的,默认加载文件的路径可以在 `CLASSPATH_RESOURCE_LOCATIONS` 数组中找到。 Classpath是Java应用程序中的一个概念,指的是Java应用程序加载资源文件和类文件的路径。Classpath...

    spring-resource

    Spring提供了多种`Resource`实现,例如`ClassPathResource`、`FileSystemResource`、`UrlResource`等,每种实现对应不同的资源定位策略。 1. `ClassPathResource`:用于访问类路径(classpath)下的资源。例如,...

    Spring-Reference_zh_CN(Spring中文参考手册)

    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. 把...

    spring中的资源访问宝典

    2. **ClassPathResource**:主要用于加载类路径(classpath)下的资源,特别适用于Web应用。它能自动查找`WEB-INF/classes`目录下的资源,无需指定协议。例如,`ClassPathResource cr = new ClassPathResource("book...

    spring资源访问

    2. **ClassPathResource**:访问类路径中的资源,这对于访问位于jar包内部的资源非常有用。 3. **FileSystemResource**:访问文件系统中的资源,通常用于读取服务器本地的文件。 4. **ServletContextResource**:...

    Spring Boot项目打成jar包后,下载resources目录下文件为空的demo

    - **正确设置路径**:在获取或下载资源时,应使用`ClasspathResource`或`ResourceLoader`来获取正确的类路径资源。例如: ```java Resource resource = new ClassPathResource("static/filename.ext"); ``` - *...

    如何加载jar包中的spring配置文件

    Spring提供了`ClassPathResource`类,可以用来加载类路径下的资源,包括jar包内的文件。例如,如果你的jar包名为`mylib.jar`,配置文件为`myconfig.xml`,你可以这样加载: ```java Resource resource = new Class...

    Springboot访问Resource下的文件.docx

    - 使用 `ClassPathResource` 类可以方便地从 classpath 中加载资源。 - 示例代码: ```java ClassPathResource resource = new ClassPathResource("file.txt"); InputStream inputStream = resource....

    21 Resource总结慕课专栏1

    其次,ClassPathResource专门用于从类路径(classpath)中获取资源。它适用于那些需要从jar包或者项目类路径下读取配置文件或静态资源的情况。ClassPathResource实现了java.io解析,使得开发者可以方便地读取类路径...

    Spring使用与实现总结.pdf

    - **Resource**的实现类包括但不限于`ByteArrayResource`、`BeanDefinitionResource`、`InputStreamResource`、`ClassPathResource`等。 **ResourceLoader接口** - **ResourceLoader**接口用于返回`Resource`对象...

    maven相关资料

    // Resource resource = new ClassPathResource("appcontext.xml"); // BeanFactory factory = new XmlBeanFactory(resource); // 用classpath路径 // ApplicationContext factory = new ...

    spring资源文件

    `ClassPathResource`、`FileSystemResource`和`UrlResource`是其常见实现,分别用于加载类路径、文件系统和URL路径的资源。 5. **文件系统访问**:Spring的`Resource`接口提供了读取、写入和复制文件的能力,例如`...

    spring3.x的读书笔记-2

    2. ClassPathResource:用于表示类路径(classpath)中的资源,如`new ClassPathResource("conf/file1.txt")`。这种方式常用于加载配置文件或资源文件,它根据给定的类路径位置来定位资源。 Resource接口提供了一些...

    spring读取jar中的配置文件

    在某些情况下,可能需要自定义`ResourceLoader`或者使用`ClassPathResource`来更精确地定位资源。 总结起来,Spring提供了多种方式读取JAR内配置文件,包括`@PropertySource`、`@ConfigurationProperties`以及直接...

    16 Resource的前生今世慕课专栏1

    当遇到如`classpath:`或`file:`的前缀时,Spring会解析这些前缀并使用相应的加载策略来获取资源。对于`classpath:`,它会在类路径中查找;对于`file:`,它会尝试从文件系统中读取。 总的来说,`Resource`接口及其...

    Java笔记-通过反射获取注解及Spring中获取某包下的所有class文件

    import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.type.classreading.MetadataReader; ...

    Spring的上课内容

    Spring容器通过`ClassPathResource`加载配置文件,它可以从类路径(ClassPath)中查找资源。例如,如果我们把`applicationContext.xml`放在`com.test.factory`包下,我们可以这样加载: ```java ClassPathResource ...

Global site tag (gtag.js) - Google Analytics