请问springboot里classpath与classpath*的区别是什么?

新手上路,请多包涵

他们都包括第三方jar包的路径吗,还有就是是不是有些地方就不能用classpath*。

比如静态资源映射,我试了试加了就不能用了直接报错。我配置类继承的WebMvcConfigurationSupport。
这里静态资源映射的classpath如果不包括第三方包,那第三方包的静态资源又怎么能访问到比如swagger,knife4j。但我确实能访问到所以这里的classpath是不是比较特殊,是包括第三方包的。

阅读 495
1 个回答

classpath: 表示从类路径中加载资源,但只加载第一个匹配的资源。
当类路径中有多个同名资源时(例如多个 JAR 包中都包含一个名为 application.properties 的文件),Spring Boot 会按照类路径的顺序加载第一个找到的资源,后续的同名资源会被忽略。

classpath*: 表示从类路径中加载所有匹配的资源。
当类路径中有多个同名资源时,Spring Boot 会加载所有匹配的资源,而不是只加载第一个。这对于需要合并多个资源文件的内容非常有用。

addResourceLocations 方法是 Spring MVC 中用于配置静态资源映射的,它接受一个或多个资源位置(String 类型的路径)。这些路径通常是具体的资源目录(如 classpath:/META-INF/resources/),而不是资源模式。Spring 的 ResourceHandlerRegistry 会将这些路径解析为 Resource 对象,并将其注册为静态资源的根路径。

当使用classpath*: 时,Spring 期望的是一个资源模式(如 classpath*:META-INF/resources/**/*.html),而不是一个目录路径。这会导致 Spring 抛出异常IllegalArgumentException或者Resource not found

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏