java项目中Classpath路径到底指的是哪里?

时间:2020-11-07 09:59:26 类型:JAVA
字号:    

  1、src不是classpath, WEB-INF/classes,lib才是classpath,WEB-INF/ 是资源目录, 客户端不能直接访问。

  2、WEB-INF/classes目录存放src目录java文件编译之后的class文件,xml、properties等资源配置文件,这是一个定位资源的入口。

  3、引用classpath路径下的文件,只需在文件名前加classpath:

<param-value>classpath:applicationContext-*.xml</param-value> 
<!-- 引用其子目录下的文件,如 -->
<param-value>classpath:context/conf/controller.xml</param-value>

  4、lib和classes同属classpath,两者的访问优先级为: lib>classes。

  5、classpath 和 classpath* 区别:

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

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

错误实例:

 

  在Spring和MyBitis继承的时候,配置mapperLocations.一开始配置是这样的.

  需要加载路径为com/zhuangi01/mapper和com/zhuangzi02/mapper下的所有mapper文件

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="mapperLocations" value="classpath:com/*/mapper/*Mapper.xml;" />
</bean>

 结果一直报com/zhuangzi02/mapper下的mapper文件的某个方法找不到.

  修改成这样就可以找到了.

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="mapperLocations" value="classpath*:com/*/mapper/*Mapper.xml;" />
</bean>

  原因是classpath:和classpath*:在spring加载资源的时候是不同的.

  classpath:只能加载找到的第一个资源文件.(上面只匹配了com/zhuangzi01/mapper/下的mapper文件,而com/zhuangzi02/mapper就忽略了)

  classpath*:能加载多个路径下的资源文件.(com/zhuangzi01/mappercom/zhuangzi02/mapper都被加载进来了.)


<