java.Spring加载resource时classpath*:与classpath:的区别


Spring可以通过指定classpath*:与classpath:前缀加路径的方式从classpath加载文件,如bean的定义文件.

classpath*:的出现是为了从多个jar文件中加载相同的文件.
classpath:只能加载找到的第一个文件.

比如 resource1.jar中的package 'com.test.rs' 有一个 'jarAppcontext.xml' 文件,内容如下:

          <bean name="ProcessorImplA" class="com.test.spring.di.ProcessorImplA" />

resource2.jar中的package 'com.test.rs' 也有一个 'jarAppcontext.xml' 文件,内容如下:

          <bean id="ProcessorImplB" class="com.test.spring.di.ProcessorImplB" />

通过使用下面的代码则可以将两个jar包中的文件都加载进来

          ApplicationContext ctx = new ClassPathXmlApplicationContext( "classpath*:com/test/rs/jarAppcontext.xml");

而如果写成下面的代码,就只能找到其中的一个xml文件(顺序取决于jar包的加载顺序)

          ApplicationContext ctx = new ClassPathXmlApplicationContext( "classpath:com/test/rs/jarAppcontext.xml");


以上为转载,原文地址: http://blog.csdn.net/kkdelta/article/details/5507799



需要补充一点的是:紧跟在classpath后面的文件的目录层级一定要写对,否则会造成Spring的Bean都初始化不了。

.classpath 文件:
<classpath>
     <classpathentry kind="src" output="target/classes" path="src/main/java"/>
     <classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
     <classpathentry kind="src" path="src/main/webapp"/>
     <classpathentry kind="src" path="src/main/resources"/>
</classpath>

配置文件的层级关系:


在web.xml中servlet的配置片段:
  1. <servlet>  
  2.     <servlet-name>spring</servlet-name>  
  3.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  4.     <init-param>  
  5.         <param-name>contextConfigLocation</param-name>  
  6.         <param-value>classpath*:*/config/spring-servlet.xml</param-value>  
  7.         <!-- <param-value>WEB-INF/config/spring-servlet.xml</param-value> -->  
  8.         <!-- <param-value>classpath*:WEB-INF/config/spring-servlet.xml</param-value> -->  
  9.     </init-param>  
  10.     <load-on-startup>2</load-on-startup>  
  11. </servlet>  
<servlet>
	<servlet-name>spring</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath*:*/config/spring-servlet.xml</param-value>
		<!-- <param-value>WEB-INF/config/spring-servlet.xml</param-value> -->
		<!-- <param-value>classpath*:WEB-INF/config/spring-servlet.xml</param-value> -->
	</init-param>
	<load-on-startup>2</load-on-startup>
</servlet>


对于    < param-value >   classpath*:*/config/spring-servlet.xml  </ param-value   要特别注意一点:
如果将它写成:
           <param-value>classpath*:config/spring-servlet.xml</param-value>
就是错误的,因为层级关系都不对,但运行启动Server的时候,可能不会报错。这对于对classpath不是很熟悉的人来说是个很头大的事情。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值