两者的区别主要在于如何搜索和加载资源。
classpath
,即 class path(类的路径),Java 编译之后.class
文件存在的路径。
两者区别:
-
classpath
:用于引用单个资源。当使用classpath前缀时,Spring将从类路径中搜索资源,并在找到第一个匹配的资源后立即停止搜索。这意味着,如果在多个jar文件或文件夹中存在具有相同名称的资源,classpath只会加载找到的第一个资源。 -
classpath*
:用于加载类路径中的所有匹配资源。当使用classpath*时,Spring将遍历整个类路径,寻找所有与指定模式匹配的资源,并将它们全部加载。这对于模块化应用程序非常有用,因为它允许加载分布在多个jar文件或文件夹中的配置文件,但是请注意这将极其消耗资源!
举个例子:
假设我们有以下文件系统结构:
my-app
├── src
│ └── main
│ └── resources
│ ├── applicationContext.xml
│ ├── module1
│ ├── A.xml
│ ├── module2
│ └── A.xml
classpath
加载单个文件 A.xml(即找到第一个为止)
<import resource="classpath:A.xml"/>
classpath*
批量加载文件 A.xml(这里会加载 module1 和 module2 下的 A.xml)
<import resource="classpath*:A.xml"/>