在写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 框架中一个常见的问题。本文主要介绍了这两种路径的区别、使用场景及注意事项,以帮助读者更好地理解和使用 Spring 配置。 概念解释 classpath:是指 WEB-...
本文将详细分析Spring通过classpath加载配置文件的不同情形,并提供解决加载过程中可能遇到的问题的方法。 首先,我们来看一下Spring加载配置文件的基本方式。在Spring中,可以通过ApplicationContext接口的实现类...
7. **SpringDemo**:这可能是项目中的一个示例或演示,展示了如何加载和使用类路径下的Spring配置文件,以及如何集成其他库,如MyBatis。 综上所述,"加载jar包中的spring配置文件"是一个关键的Java开发实践,它...
- **定义**:使用`classpath*:`, Spring会搜索整个类路径(包括项目本身及所有依赖的第三方库)中同名的资源文件,并将其合并为一个集合来处理。 - **应用场景**:当需要同时考虑项目内部配置文件与外部依赖库中...
- **作用**:定义移动设备视图的前缀和后缀。 - **默认值**:`mobile/` - **示例**: ```properties spring.mobile.devicedelegatingviewresolver.mobile-prefix=m/ spring.mobile.devicedelegatingviewresolver....
在`initWebApplicationContext`方法中,首先检查当前的ServletContext中是否已经存在一个根ApplicationContext。如果存在,则抛出`IllegalStateException`,因为每个Web应用只能有一个根ApplicationContext。接着,...
以下是一个基本的配置示例: ```xml class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <value>classpath:/spring/include/dbQuery.properties ``` 这里,`...
### 关于Spring系统中多系统的配置 在Spring框架中,我们经常会遇到单个工程需要配置多个子系统的场景。为了更好地管理这些子系统及其配置,Spring提供了多种方式来处理这一问题。本文将详细介绍如何在一个项目中...
在Spring配置文件中,每个前缀(如`context`)都需要有一个对应的XML命名空间声明。在提供的配置文件片段中,我们可以看到 `<beans>` 元素已经引用了 `http://www.springframework.org/schema/beans` 命名空间,但...
为了使ExtDirectSpring能够正常工作,需要在`web.xml`中配置一个Spring的`DispatcherServlet`。 ```xml <servlet-name>action <servlet-class>org.springframework.web.servlet.DispatcherServlet ...
- **`min-evictable-idle-time-millis`**:一个连接在驱逐前的最小空闲时间。 - **`validation-query`**:用来验证连接有效性的SQL语句。 - **`test-while-idle`**:空闲时验证连接的有效性。 - **`test-on-borrow`*...
`<listener>`标签中的`<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>`定义了一个监听器,它会在Web应用启动时自动加载默认的Spring配置文件,即`/WEB-INF/...
在Spring框架中,`@ImportResource`是一个非常重要的注解,它允许我们在Java配置类中引入XML配置文件,从而将XML中的bean定义合并到Spring容器中。这个特性在Spring Cloud项目中同样适用,因为Spring Cloud是基于...
从 DispatcherServlet 和 ContextLoaderListener 到控制器、视图解析器以及 RESTful 风格的支持,Spring MVC 3.0 都是一个值得学习的强大工具。通过掌握这些核心概念和技术,开发者可以更加高效地构建高质量的 Web ...
接着,需要创建一个名为`log4j.properties`的配置文件,并将其放置在类路径(CLASSPATH)中。该文件用于定义日志输出的具体设置,如日志级别、输出目的地等。 #### 三、log4j.properties配置解析 接下来,我们将...
Spring Boot 2.x版本中,在HTML页面中引用CSS和JavaScript资源时可能会遇到资源不被正确加载的问题。通常情况下,资源文件放在项目的静态文件夹(默认为/static或/public或/resources)中。但在某些情况下,即便配置...
4. **配置Thymeleaf**:在`application.properties`或`application.yml`中配置Thymeleaf的路径,例如:`spring.thymeleaf.prefix=classpath:/templates/`,指定模板文件的位置。 5. **创建控制器**:在Spring中创建...
在Java开发中,Spring框架是应用最广泛的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)容器。当我们的应用程序被打包成JAR文件后,有时我们需要从JAR内部读取配置文件,例如application....
Spring框架通过这些特性有效地解决了企业应用开发中的复杂性问题,提高了开发效率和代码的可维护性。 #### 二、控制反转与依赖注入 **控制反转(IoC)与依赖注入(DI)** - **控制反转(IoC)**:在传统程序设计...