spring classpath:和classpath*:区别和实际应用

spring classpath:和classpath*:区别和实际应用,第1张

classpath:和classpath*:的含义

classpath: :表示从类路径中加载资源,classpath:和classpath:/是等价的,都是相对于类的根路径。资源文件库标准的在文件系统中,也可以在JAR或ZIP的类包中。

classpath*::假设多个JAR包或文件系统类路径都有一个相同的配置文件,classpath:只会在第一个加载的类路径下查找,而classpath*:会扫描所有这些JAR包及类路径下出现的同名文件。

classpath:只会在第一个加载的类路径下查找?

怎么去理解这句话?我根据我的实验结果来解释这个问题。

案例一:

前提:

工程A引入B和C,三个工程都有配置文件resources/spring/spring-application.xml,其中A有配置文件resources/spring/spring-environment.xml,此文件中配置

场景一:A、B、C工程有同包同名的class,分别配置在各自的spring-application.xml中,A工程的bean被加载

场景二:B、C工程有同包同名的class,分别配置在各自的spring-application.xml中,A工程POM文件引入B和C的顺序决定哪个工程的class被加载,换句话说,jar包的引入顺序决定了class的加载权

场景三:A、B、C的spring-application.xml中配置了不同的class,那么三个工程的配置文件都会被加载,此时要注意避免三个配置文件中都配置相同的class,否则会抛异常

总结: classpath只会在第一个加载的类路径下查找,如果没有,查找当前类路径下的jar文件中的配置文件,找到停止,否则继续找下个jar文件中的配置文件,直到找到,否则抛异常

案例二:

前提:

工程A和B,B为公共模块,设计了公共的客户端类Client,A引入B,两个工程都有配置文件spring-client.xml,分别配置了一个Client Bean,

A:

# resources/spring/spring-environment.xml 配置文件引入B工程的 spring-common.xml 文件

# resources/spring/spring-client.xml 配置文件

1

2

3

4

5

6

7

B:

# resources/spring/spring-common.xml 配置文件引入的 spring-client.xml ,这个配置文件会引入A工程的,不会引入自己的

# resources/spring/spring-client.xml 配置文件

1

2

3

4

5

6

7

结论: B工程spring-common.xml配置文件import spring-client.xml,spring-client.xml在A和B工程中都存在,A引入B的spring-common.xml配置文件,A工程的spring-client.xml生效

针对多module工程的建议

我们上面的案例中提到多个工程有同包的工程结构,而实际的module设计中,建议不同的module使用不同的包名,避免引起不必要的麻烦。

拓展

Spring设计了一个Resource接口,该接口拥有对应不同资源类型的实现类,例如:

ClassPathResource

类路径下的资源,资源以相对于类路径的方式表示

FileSystemResource

文件系统资源,资源以文件系统路径的方式表示,如D:/conf/bean.xml

InputStreamResource

ServletContextResource

UrlResource

封装了java.net.URL,能够访问任何可以通过URL表示的资源,如文件系统资源、HTTP资源、FTP资源

PathResource

封装了java.net.URL、java.nio.file.path

地址前缀 示例 对应的资源类型

classpath: classpath:/spring/spring-*.xml 从类路径中加载资源,classpath:和classpath:/是等价的,都是相对于类的根路径。资源文件库标准的在文件系统中,也可以在JAR或ZIP的类包中

file: file:/conf/bean.xml 使用UrlResource从文件系统目录中装载资源,可采用绝对或相对路径

http:// http://www.p7.com/resource/bean.xml 使用URLResource从Web服务器中装载资源

ftp:// ftp://www.p7.com/resource/bean.xml 使用URLResource从FTP服务器中装载资源

没有前缀 conf/bean.xml 根据ApplicationContext的具体实现采用对应类型的Resource

————————————————

原文链接:https://blog.csdn.net/qq_30038111/article/details/82116559

gitpull时classpath冲突原因:工程->Team->同步,从远程pull至本地,就会出现如下内容,使用Merge Tool,执行第二项。再手动修改。

1、git pull文件和本地文件存在存在冲突,说明两份文件之间存在差异部分。

2、一般情况下肉眼很难快速并且准确的找出差异内容,你可以使用Beyond Compare软件。

先用 git log 查看上次上库的版本,把commit复制出来,在用 git reset --hard <commit>到上一个版本,然后再git pull。

Git的功能特性:

1、从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。

2、在自己的机器上根据不同的开发目的,创建分支,修改代码。

3、在单机上自己创建的分支上提交代码。

4、在单机上合并分支。

5、把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。

6、生成补丁(patch),把补丁发送给主开发者。

7、看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/472481.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-06-06
下一篇2023-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存