classpath:/ 与 classpath*:/ 引发的问题总结

来源:互联网 发布:java notifyall 编辑:程序博客网 时间:2024/06/16 16:10

概念介绍:

classpath:是指WEB-INF文件夹下的classes目录


tomcat-7.0.50 目录结构及作用

                bin: 存放tomcat的命令

                conf:存放tomcat的一些配置文件

                lib:存放tomcat运行需要加载的jar包

                logs:存放tomcat运行过程中产生的日志文件

                temp:存放tomcat运行过程中产生的临时文件

                webapps:存放应用程序

                work:存放tomcat运行时的编译后文件,例如jsp编译后的文件

              

classes:是指项目部署后存放class文件xml文件jar包的文件夹

                  以tomcat部署项目为例 文件路径  E:\tools\apache-tomcat-6.0.44\webapps\项目name\WEB-INF\classes


问题说明:

在spring配置文件中,通过 classpath*:/xxx.xml 引入了  外部配置文件 然后在运行junit单元测试的时候 报错xxx.xml 配置文件中的一个bean 注入失败;


classpath与 classpath* 区别

classpath 是精确查找   classpath* 是模糊查找

classpath : 只会到你的class路径中查找文件。

classpath* : 不仅包含class路径,还包括jar文件中(class路径)进行查找。

classpath*:需要遍历所有的classpath,所以加载速度很慢;当项目中有多个classpath路径,并同时加载多个classpath路径下的文件,*就会加载所有classpath下的文件

                    不加*只会加载第一个classpath路径下的文件。


我的问题:

问题的本质是 通过手动加载上下文 没有找到目标类,也就是说目标类并没有被加载。

没有被加载的原因是 spring引入外部文件的时候 外部文件名称写错了。


总结:
1、不需要*的不要加,不然会影响报错信息导致不能快速的找到问题所在(当我将*去掉的时候,很明显的报错说 文件加载失败,原因是目标文件不存在)

2、文件要有同意的命名规范,可以防止因为习惯问题导致的错误。

原创粉丝点击