`

Spring中关于classpath:和classpath*:前缀的一个小问题

 
阅读更多

在写Java代码时,有很多场景需要用到从classpath中加载资源。

使用Spring时,定义了比较方便的前缀风格告诉程序从哪里加载。

比较常用的有classpath:和classpath*:两种前缀,用于指定从classpath中加载资源。但两者有些细微差别。

 

以加载Spring的配置文件为例,以下的写法大家应该比较熟悉:

 

ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(new String[] {
                "classpath:META-INF/spring/a.bean.xml",
                 "classpath*:META-INF/spring/b.bean.xml" });
 

两种写法是希望在当前程序的classpath下去加载META-INF/spring/a.bean.xml和META-INF/spring/b.bean.xml。

但请注意,前者没有*作为前缀,在classpath下面找不到META-INF/spring/a.bean.xml时,程序会马上抛出FileNotFoundException,提示你文件找不到,这种Fail Fast的风格,在定位问题的时候可能很有帮助。

后者因为加上了*通配符,所以即使在classpath下面找不到META-INF/spring/b.bean.xml时,程序只会偷偷忍掉,不做任何错误提示。当然,这在某些特定的场景下,可能也是有意义的。

 

所以根据不同的使用场景,这两点区别可能需要注意一下。

另外,当某些时候,你怀疑Spring的某些配置文件加载的不对的时候,可以通过spring类库中提供的PathMatchingResourcePatternResolver类来来帮你定位一下,程序到底从哪里加载进来的你指定的配置文件,实例代码如下:

 

        try {
            for (Resource r : new PathMatchingResourcePatternResolver().getResources("your_locationPattern")){
                System.out.println("The real path is : "+r.getFile().getAbsolutePath());
            }
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
 
分享到:
评论

相关推荐

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

    Spring 配置中的classpath:与classpath*:的区别是 Spring 框架中一个常见的问题。本文主要介绍了这两种路径的区别、使用场景及注意事项,以帮助读者更好地理解和使用 Spring 配置。 概念解释 classpath:是指 WEB-...

    Spring中使用classpath加载配置文件浅析

    本文将详细分析Spring通过classpath加载配置文件的不同情形,并提供解决加载过程中可能遇到的问题的方法。 首先,我们来看一下Spring加载配置文件的基本方式。在Spring中,可以通过ApplicationContext接口的实现类...

    加载jar包中的spring配置文件

    7. **SpringDemo**:这可能是项目中的一个示例或演示,展示了如何加载和使用类路径下的Spring配置文件,以及如何集成其他库,如MyBatis。 综上所述,"加载jar包中的spring配置文件"是一个关键的Java开发实践,它...

    分享Java知识库

    - **定义**:使用`classpath*:`, Spring会搜索整个类路径(包括项目本身及所有依赖的第三方库)中同名的资源文件,并将其合并为一个集合来处理。 - **应用场景**:当需要同时考虑项目内部配置文件与外部依赖库中...

    Spring-Boot-application.properties

    - **作用**:定义移动设备视图的前缀和后缀。 - **默认值**:`mobile/` - **示例**: ```properties spring.mobile.devicedelegatingviewresolver.mobile-prefix=m/ spring.mobile.devicedelegatingviewresolver....

    Spring源码学习七:web应用自动装配Spring配置文件1

    在`initWebApplicationContext`方法中,首先检查当前的ServletContext中是否已经存在一个根ApplicationContext。如果存在,则抛出`IllegalStateException`,因为每个Web应用只能有一个根ApplicationContext。接着,...

    SPRING:bean配置properties

    以下是一个基本的配置示例: ```xml class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <value>classpath:/spring/include/dbQuery.properties ``` 这里,`...

    关于spring系统中多系统的配置

    ### 关于Spring系统中多系统的配置 在Spring框架中,我们经常会遇到单个工程需要配置多个子系统的场景。为了更好地管理这些子系统及其配置,Spring提供了多种方式来处理这一问题。本文将详细介绍如何在一个项目中...

    Spring 报错:元素 "context:component-scan" 的前缀 "context" 未绑定的问题解决

    在Spring配置文件中,每个前缀(如`context`)都需要有一个对应的XML命名空间声明。在提供的配置文件片段中,我们可以看到 `<beans>` 元素已经引用了 `http://www.springframework.org/schema/beans` 命名空间,但...

    Ext Direct Spring 参考手册

    为了使ExtDirectSpring能够正常工作,需要在`web.xml`中配置一个Spring的`DispatcherServlet`。 ```xml <servlet-name>action <servlet-class>org.springframework.web.servlet.DispatcherServlet ...

    SpringBoot .yml

    - **`min-evictable-idle-time-millis`**:一个连接在驱逐前的最小空闲时间。 - **`validation-query`**:用来验证连接有效性的SQL语句。 - **`test-while-idle`**:空闲时验证连接的有效性。 - **`test-on-borrow`*...

    加载spring 文件,在web.xml中的配置

    `<listener>`标签中的`<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>`定义了一个监听器,它会在Web应用启动时自动加载默认的Spring配置文件,即`/WEB-INF/...

    示例代码:spring使用【@ImportResource】导入一个xml里面定义的bean

    在Spring框架中,`@ImportResource`是一个非常重要的注解,它允许我们在Java配置类中引入XML配置文件,从而将XML中的bean定义合并到Spring容器中。这个特性在Spring Cloud项目中同样适用,因为Spring Cloud是基于...

    springmvc3.0帮助文档

    从 DispatcherServlet 和 ContextLoaderListener 到控制器、视图解析器以及 RESTful 风格的支持,Spring MVC 3.0 都是一个值得学习的强大工具。通过掌握这些核心概念和技术,开发者可以更加高效地构建高质量的 Web ...

    log4j详细配置

    接着,需要创建一个名为`log4j.properties`的配置文件,并将其放置在类路径(CLASSPATH)中。该文件用于定义日志输出的具体设置,如日志级别、输出目的地等。 #### 三、log4j.properties配置解析 接下来,我们将...

    spring boot 2.x html中引用css和js失效问题及解决方法

    Spring Boot 2.x版本中,在HTML页面中引用CSS和JavaScript资源时可能会遇到资源不被正确加载的问题。通常情况下,资源文件放在项目的静态文件夹(默认为/static或/public或/resources)中。但在某些情况下,即便配置...

    spring与thymeleaf小示例

    4. **配置Thymeleaf**:在`application.properties`或`application.yml`中配置Thymeleaf的路径,例如:`spring.thymeleaf.prefix=classpath:/templates/`,指定模板文件的位置。 5. **创建控制器**:在Spring中创建...

    spring读取jar中的配置文件

    在Java开发中,Spring框架是应用最广泛的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)容器。当我们的应用程序被打包成JAR文件后,有时我们需要从JAR内部读取配置文件,例如application....

    Spring使用与实现总结.pdf

    Spring框架通过这些特性有效地解决了企业应用开发中的复杂性问题,提高了开发效率和代码的可维护性。 #### 二、控制反转与依赖注入 **控制反转(IoC)与依赖注入(DI)** - **控制反转(IoC)**:在传统程序设计...

Global site tag (gtag.js) - Google Analytics