• classpath:和classpath*:的含义


    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,此文件中配置<import resource="classpath:/spring/spring-application.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文件中的配置文件,直到找到,否则抛异常

    针对多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
  • 相关阅读:
    了解运行时类型信息(RTTI)
    linux培训笔记1
    Delphi 的各种错误信息(中英文)
    delphi XML 原来可以玩接口
    wxWidgets初学者导引(2)——下载、安装wxWidgets
    Delphi中ADO异步执行方式
    模态运行EXE程序
    window.setTimeout()函数的使用
    应用程序的关闭退出(在FMX中,Activity替代了Form的概念)
    Dll方式的线程,需要引用这个
  • 原文地址:https://www.cnblogs.com/weixupeng/p/15667902.html
Copyright © 2020-2023  润新知