浅析Spring配置中的classpath:与classpath*:的区别

classpath:和classpath*:的含义

classpath: :表示从类路径中加载资源,classpath:和classpath:/是等价的,都是相对于类的根路径。资源文件库标准的在文件系统中,也可以在JAR或ZIP的类包中。
classpath*::假设多个JAR包或文件系统类路径都有一个相同的配置文件,classpath:只会在第一个加载的类路径下查找,而classpath*:会扫描所有这些JAR包及类路径下出现的同名文件。

概念解释及使用场景:

classpath是指WEB-INF文件夹下的classes目录。

通常我们一般使用这种写法实在web.xml中,比如spring加载bean的上下文时,如下:

<!--系统自动加载文件-->
<!--这里使用的是classpath*:的形式-->
<context-param>
 <param-name>contextConfigLocation</param-name>
 <param-value>classpath*:/spring-context-*.xml</param-value>
</context-param>
<!--配置spring的context监听器 -->
<listener>
 <listener-class>org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

经过如上的写法,可能会认为这个就是web.xml固有的写法,其实不是,这种写法是spring的写法,与web.xml无关。可以通过spring的方法使用这种方式进行路径的读取。

classpath和classpath*区别:

classpath:只会到你的class路径中查找找文件。

classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找。

注意:用classpath*:需要遍历所有的classpath,所以加载速度是很慢的;因此,在规划的时候,应该尽可能规划好资源文件所在的路径,尽量避免使用classpath*。

classpath*的使用:

当项目中有多个classpath路径,并同时加载多个classpath路径下(此种情况多数不会遇到)的文件,*就发挥了作用,如果不加*,则表示仅仅加载第一个classpath路径。

一些使用技巧:

1、从上面使用的场景看,可以在路径上使用通配符*进行模糊查找。比如:

<param-value>classpath:applicationContext-*.xml</param-value> 

2、"**/"表示的是任意目录;"**/applicationContext-*.xml"表示任意目录下的以"applicationContext-"开头的XML文件。

3、程序部署到tomcat后,src目录下的配置文件会和class文件一样,自动copy到应用的WEB-INF/classes目录下;classpath:与classpath*:的区别在于,前者只会从第一个classpath中加载,而后者会从所有的classpath中加载。

4、如果要加载的资源,不在当前ClassLoader的路径里,那么用classpath:前缀是找不到的,这种情况下就需要使用classpath*:前缀。

5、在多个classpath中存在同名资源,都需要加载时,那么用classpath:只会加载第一个,这种情况下也需要用classpath*:前缀。

总结

到此这篇关于Spring配置中的的文章就介绍到这了,更多相关spring 配置classpath:与classpath*:的区别内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • spring boot加载资源路径配置和classpath问题解决

    1.spring boot默认加载文件的路径: /META-INF/resources/ /resources/ /static/ /public/ 我们也可以从spring boot源码也可以看到: private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/", "classpath:/resources/", "classp

  • Spring实战之使用ClassPathResource加载xml资源示例

    本文实例讲述了Spring使用ClassPathResource加载xml资源.分享给大家供大家参考,具体如下: 一 代码 package lee; import org.springframework.core.io.ClassPathResource; import org.dom4j.*; import org.dom4j.io.*; import java.util.*; import java.util.*; public class ClassPathResourceTest { p

  • 浅析Spring配置中的classpath:与classpath*:的区别

    classpath:和classpath*:的含义 classpath: :表示从类路径中加载资源,classpath:和classpath:/是等价的,都是相对于类的根路径.资源文件库标准的在文件系统中,也可以在JAR或ZIP的类包中. classpath*::假设多个JAR包或文件系统类路径都有一个相同的配置文件,classpath:只会在第一个加载的类路径下查找,而classpath*:会扫描所有这些JAR包及类路径下出现的同名文件. 概念解释及使用场景: classpath是指WEB-I

  • Spring配置中transactionAttributes的使用方法介绍

    最近碰到这个问题,在使用spring提供的JpaTemplate进行查询时,如果数据量超过100 条,查询效率就会明显降低.由于开始时使用JPA内部的双向关联,造成各实体内部关联过多,从而影响所有的操作,因此怀疑是因为JPA的关联关系所致.但是去掉关联关系后的效果不显著. 查找spring的相关配置,发现原来关于"transactionAttributes"有问题.原来的配置如下: <bean id="baseTransactionProxy" class=&

  • Spring框架中 @Autowired 和 @Resource 注解的区别

    Spring框架中 @Autowired 和 @Resource 注解的区别 在 spring 框架中,除了使用其特有的注解外,使用基于 JSR-250 的注解,它包括 @PostConstruct, @PreDestroy 和 @Resource 注释. 首先,咱们简单了解 @PostConstruct 和 @PreDestroy 注释: 为了定义一个 bean 的安装和卸载,我们可以使用 init-method 和 destroy-method 参数简单的声明一下 ,其中 init-meth

  • 浅析Python字符串中的r和u的区别

    目录 1.r(R) 2.u(U) 补充 参考文献 Python中字符串前面我们经常看到加r(R)或u/(U)的前缀,而这两个符号是什么意思呢? 1.r(R) r意为raw,表示不包含转义字符的原生字符串.常见的转义字符包括下列几种: 转义字符 描述 \(在行尾时) 续航符 \\ 反斜杠符号 ' 单引号(字符串需要为""形式) " 双引号(需要字符串用需要为''形式) \b 退格(Backspace) \000 空 \n 换行 \v 纵向制表符 \t 横向制表符 下面是几个转义

  • 浅析Vue.js中v-bind v-model的使用和区别

    v-model 指令在表单控件元素上创建双向数据绑定,所谓双向绑定,指的就是我们在js中的vue实例中的data与其渲染的dom元素上的内容保持一致,两者无论谁被改变,另一方也会相应的更新为相同的数据 最基础的就是实现一个联动的效果 <body> <div class="app"> <span>Multiline message is:</span> <p>{{message}}</p> <br> &l

  • 浅析Spring Boot中的spring-boot-load模块

    一.前言 正常情况下classloader只能找到jar里面当前目录或者文件类里面的*.class文件.为了能够加载嵌套jar里面的资源之前都是把嵌套jar里面的class文件和应用的class文件打包为一个jar,这样就不存在嵌套jar了,但是这样做就不能很清晰的知道应用到底依赖了哪些东西,哪些是应用自己的,另外多个jar里面的class可能内容不一样但是文件名却一样.springboot中spring-boot-loader就是为优雅解决这个问题而诞生的. spring-boot-loade

  • 深入浅析Spring Security5中默认密码编码器

    1.概述 在Spring Security 4中,可以使用内存中身份验证以纯文本格式存储密码. 对版本5中的密码管理过程进行了重大改进,为密码编码和解码引入了更安全的默认机制.这意味着如果您的Spring应用程序以纯文本格式存储密码,升级到Spring Security 5可能会导致问题. 在这个简短的教程中,我们将描述其中一个潜在的问题,并展示该问题的解决方案. 2. Spring Security 4 我们首先展示一个标准的安全配置,它提供简单的内存中身份验证(适用于Spring 4): @

  • Nginx配置中指令root和alias的区别浅析

    前言 最近在nginx上部署日志分析工具awstats时,在配置awstats分析结果可供网页浏览这步时,分析结果页面访问总是404.后来查阅了一些资料,发现是root和alias的用法区别没搞懂导致的,这里特地将这两者区别详尽道来,供大家学习参考. root和alias都可以定义在location模块中,都是用来指定请求资源的真实路径,比如: location /i/ { root /data/w3; } 请求 http://foofish.net/i/top.gif 这个地址时,那么在服务器

  • nginx proxy_pass反向代理配置中url后加不加/的区别介绍

    前言 nginx作为web服务器一个重要的功能就是反向代理.nginx反向代理的指令不需要新增额外的模块,默认自带proxy_pass指令,只需要修改配置文件就可以实现反向代理. 而在日常的web网站部署中,经常会用到nginx的proxy_pass反向代理,有一个配置需要弄清楚:配置proxy_pass时,当在后面的url加上了/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走;如果没有/,则会把匹配的路径部分也给代理走(这样配置可以参考这篇文章). 下面举个小实

  • 使用JavaConfig代替xml实现Spring配置操作

    目录 JavaConfig代替xml实现Spring配置 简单实体类 JavaConfig配置类 测试类 脱离xml用JavaConfig配置Spring 情况一 情况二 JavaConfig代替xml实现Spring配置 简单实体类 package indi.stitch.pojo; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component

随机推荐