Spring学习系列:错误记录(二) : 类路径和resource目录的关系
2017-08-15 22:01
477 查看
问题起因
今天在看书的时候看到Spring里资源访问部分,有个从类路径寻找资源文件的类叫做ClassPathResource,他的祖先类是Resource,可以从类路径跟目录寻找资源文件。但是在我写代码试验的时候发现总是找不到资源文件导致频频报错。以上提到的类均是指spring 框架提供的
问题“解决”
后来我意识到我犯了一个大错误,这里的从类根目录加载文件指的是便宜好的存放.class文件的目录,而不是源文件类的目录(基础知识不扎实)。于是我尝试去读取.class文件public class Demo { public static void main(String[] args) { ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); Resource resource = new ClassPathResource("com/yeonon/Demo.class"); System.out.println(resource.exists()); } }
结果返回的是True,但是如果我换成Demo.java,结果返回的就是False了,说明从“从类的路径查找文件”这句话的意思应该是从编译好的存放.class文件目录查找,这似乎解决了问题。
“风波再起”
现在我们是知道在哪里读取文件了,最直接的办法是把资源文件(例如beans.xml)放到编译好的目录中去,好像这就能解决问题了。但是,到时候程序发布的时候是不可能连同这个目录一起发布的,那该怎么办呢?这时候就要利用resources这个目录了(好像这是Spring建议创建的一个资源目录),将文件放入这个目录就能正确的读取文件了。为什么能直接从resources目录读取,目前我不清楚是IDEA的功劳还是Spring的功劳。
最后
这次错误主要是不能理解“类路径下查找”这句话的意思,归根结底还是java基础不扎实。顺便说一下资源查找还有一种方法比较方便:ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); Resource resource = resolver.getResource("classpath:beans.xml");
配个书上的图吧:
相关文章推荐
- Spring学习系列:错误记录(一):Spring注解错误记录
- Spring学习系列 : 错误记录(三) MyBatis日期读取
- J2EE系列之Spring4学习笔记(六)--IOC详解(bean之间的关系,bean的作用范围)
- 【转载】spring.net 学习系列目录
- Spring4 学习系列之——在classpath目录下扫描组件
- spring学习错误总结:spring配置applicationContext自动加载配置 之404 cannot find resource
- 工作学习系列一,关于spring的@Autoawared和@Resource
- 【Spring学习笔记】之【4.4 资源之Resource通配符路径】
- Spring学习记录(四)---bean之间的关系:继承、依赖
- spring 学习 错误记录
- windows核心编程系列学习记录1——错误处理
- (转载)Aras Innovator(open PLM)学习记录系列之一(介绍篇)
- [API学习]获取程序所在的目录,路径
- [Linux学习笔记]目录、路径、文件、目录常用命令
- 学习WCF,记录错误
- Spring.NET学习笔记——目录(原)
- 实例学习SSIS(四)-- 使用日志记录和错误流重定向
- 菜鸟的学习目录-LINQ文章系列
- ITCAST视频-Spring学习笔记(编码剖析@Resource注解的实现原理)
- 学习结构[记录]类型(3) - 结构间的关系