java.Spring加载resource时classpath*:与classpath:的区别
2013-12-26 14:36
411 查看
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>
配置文件的层级关系:
![](http://img.my.csdn.net/uploads/201209/18/1347898833_5968.jpg)
在web.xml中servlet的配置片段:
[java]
view plaincopyprint?
<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>
[align=left]对于 <param-value> classpath*:*/config/spring-servlet.xml </param-value > 要特别注意一点:[/align]
如果将它写成:
<param-value>classpath*:config/spring-servlet.xml</param-value>
就是错误的,因为层级关系都不对,但运行启动Server的时候,可能不会报错。这对于对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>
配置文件的层级关系:
![](http://img.my.csdn.net/uploads/201209/18/1347898833_5968.jpg)
在web.xml中servlet的配置片段:
[java]
view plaincopyprint?
<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>
<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>
[align=left]对于 <param-value> classpath*:*/config/spring-servlet.xml </param-value > 要特别注意一点:[/align]
如果将它写成:
<param-value>classpath*:config/spring-servlet.xml</param-value>
就是错误的,因为层级关系都不对,但运行启动Server的时候,可能不会报错。这对于对classpath不是很熟悉的人来说是个很头大的事情。
相关文章推荐
- Spring加载resource时classpath*:与classpath:的区别
- Spring加载resource时classpath*:与classpath:的区别
- Spring加载resource时classpath*:与classpath:的区别
- Spring加载resource时classpath*:与classpath:的区别
- Spring加载resource时classpath*:与classpath:的区别
- Spring加载resource时classpath*:与classpath:的区别
- Spring加载resource时classpath*:与classpath:的区别
- Spring加载resource时classpath*:与classpath:的区别
- Spring加载resource时classpath*:与classpath:的区别
- Spring加载resource时classpath*:与classpath:的区别
- Spring加载resource时classpath*:与classpath:的区别
- Spring加载resource时classpath*:与classpath:的区别
- Spring加载resource时classpath*:与classpath:的区别
- Spring加载resource时classpath*:与classpath:的区别
- Spring加载resource时classpath*:与classpath:的区别
- Spring加载resource时classpath*:与classpath:的区别
- Spring加载resource时classpath*:与classpath:的区别
- Spring加载resource时classpath*:与classpath:的区别
- spring加载resource时classpath*:与classpath:的区别
- Spring加载resource时classpath*:与classpath:的区别