Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the difference between "classpath:" and "classpath:/" in Spring XML?

I am working on some Spring XML configuration files and sometimes they use "classpath:/datasource.xml" and sometimes "classpath:datasource.xml". Is there a difference between the two or is the leading / optional / implied / redundant?

like image 693
Sled Avatar asked Dec 21 '12 17:12

Sled


1 Answers

I don't see any difference between these two. The biggest difference that you will see is that the relative path and the * on the classpath location

Here is an excerpt from Spring Resources, look for section 4.7.2.2

Classpath*:
The "classpath*:" prefix can also be combined with a PathMatcher pattern in the rest of the location path, for example "classpath*:META-INF/*-beans.xml". In this case, the resolution strategy is fairly simple: a ClassLoader.getResources() call is used on the last non-wildcard path segment to get all the matching resources in the class loader hierarchy, and then off each resource the same PathMatcher resoltion strategy described above is used for the wildcard subpath.

This means that a pattern like "classpath*:*.xml" will not retrieve files from the root of jar files but rather only from the root of expanded directories. This originates from a limitation in the JDK's ClassLoader.getResources() method which only returns file system locations for a passed-in empty string (indicating potential roots to search).

like image 58
muruga Avatar answered Oct 12 '22 04:10

muruga