- 浏览: 129717 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
skill_job:
请问如何保证instance实例的线程安全?
浅谈java单例模式延迟加载 -
FLFLFLFLFLS:
很实用的,
java代码下载了,在eclipse中运行了一下 ...
针对如"123456"之类的任意字符序列,输出它们所有的排列组合 . -
FLFLFLFLFLS:
很实用的,
java代码下载了,在eclipse中运行了一下, ...
针对如"123456"之类的任意字符序列,输出它们所有的排列组合 . -
dengminghua1016:
不同古文的深远,现代的网络词语充满活力,其词意的直接和幽默将现 ...
网络经典语句 -
dengminghua1016:
古文的意境可意不可言,给人的想象空间可谓浩瀚无边···收集一些 ...
古文中惊艳的句子,绝对有你想要的!
首先在web.xml中配置监听器listener,让Spring进行自动获取。具体加入的代码如下:
只要其启动服务这个配置就会默认的去加载我们的配置文件,自动的将里面的bean都给初始化了。默认情况下它会去/WEB-INF/applicationContext.xml文件。如果自己想要将配置文件放到classpath下,即src目录下,则需要再进行路径的指定,具体代码如下:
这样的话,在服务器启动的时候就会自动的去classpa也就是src目录下找所有的以:applicationContext-*.xml文件并将它们初始化。
Spring加载resource时classpath*:与classpath:的区别
Spring可以通过指定classpath*:与classpath:前缀加路径的方式从classpath加载文件,如bean的定义文件.classpath*:的出现是为了从多个jar文件中加载相同的文件.classpath:只能加载找到的第一个文件.
比如 resource1.jar中的package 'com.test.rs' 有一个 'jarAppcontext.xml' 文件,内容如下:
<bean name="ProcessorImplA" class="com.test.spring.di.ProcessorImplA" />
resource2.jar中的package 'com.test.rs' 也有一个 'jarAppcontext.xml' 文件,内容如下:
<bean id="ProcessorImplB" class="com.test.spring.di.ProcessorImplB" />
通过使用下面的代码则可以将两个jar包中的文件都加载进来
ApplicationContext ctx = new ClassPathXmlApplicationContext( "classpath*:com/test/rs/jarAppcontext.xml");
而如果写成下面的代码,就只能找到其中的一个xml文件(顺序取决于jar包的加载顺序)
ApplicationContext ctx = new ClassPathXmlApplicationContext( "classpath:com/test/rs/jarAppcontext.xml");
classpath*:的使用是为了多个component(最终发布成不同的jar包)并行开发,各自的bean定义文件按照一定的规则:package+filename,而使用这些component的调用者可以把这些文件都加载进来.
classpath*:的加载使用了classloader的 getResources() 方法,如果是在不同的J2EE服务器上运行,由于应用服务器提供自己的classloader实现,它们在处理jar文件时的行为也许会有所不同。 要测试classpath*: 是否有效,可以用classloader从classpath中的jar文件里加载文件来进行测试:getClass().getClassLoader().getResources("<someFileInsideTheJar>")。(上面的例子是在sun的jre中运行的状态)
从Spring的源码,在PathMatchingResourcePatternResolver类中,我们可以更清楚的了解其对的处理:如果是以classpath*开头,它会遍历classpath.
http://blog.csdn.net/kkdelta/article/details/5560210,简介了在JAVA里遍历classpath中读取找到的所有符合名称的文件.
另外在加载resource的时候,其他前缀的意义如下表所示:注意classpath*只能用与指定配置文件的路径,不能用在用于getResource的参数.如appContext.getResource("classpath*:conf/bfactoryCtx.xml")会异常的.
从Spring的源码可以看出原因:如果是classpath:开头,从classpath加载,否则尝试URL,如果失败,调用 getResourceByPath
getResourceByPath会被不同ApplicationContext 实现覆盖.
如 GenericWebApplicationContext覆盖为如下:
protected Resource getResourceByPath(String path) {
return new ServletContextResource(this.servletContext, path);
}
如 FileSystemXmlApplicationContext覆盖为如下:
最终从文件加载的时候仍然是JAVA中常见的读取文件的方法:
如ClassPathResource得到inputstream的方法是利用class loader.
如FileSystemResource得到inputstream的方法是利用FileInputStream.
public InputStream getInputStream() throws IOException {
return new FileInputStream(this.file);
}
如ServletContextResource得到inputstream的方法是利用servletContext.getResourceAsStream.
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
只要其启动服务这个配置就会默认的去加载我们的配置文件,自动的将里面的bean都给初始化了。默认情况下它会去/WEB-INF/applicationContext.xml文件。如果自己想要将配置文件放到classpath下,即src目录下,则需要再进行路径的指定,具体代码如下:
<!-- Context Configuration locations for Spring XML files --> <context-param> <param-name>contextConfigLocation</param-name> <!-- <param-value>/WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml</param-value> --> <!-- 加入你的配置文件放在了src下的,命名规则为:applicationContext-*.xml形式,则可以从以下方式配置--> <param-value>classpath:applicationContext-*.xml</param-value> </context-param>
这样的话,在服务器启动的时候就会自动的去classpa也就是src目录下找所有的以:applicationContext-*.xml文件并将它们初始化。
Spring加载resource时classpath*:与classpath:的区别
Spring可以通过指定classpath*:与classpath:前缀加路径的方式从classpath加载文件,如bean的定义文件.classpath*:的出现是为了从多个jar文件中加载相同的文件.classpath:只能加载找到的第一个文件.
比如 resource1.jar中的package 'com.test.rs' 有一个 'jarAppcontext.xml' 文件,内容如下:
<bean name="ProcessorImplA" class="com.test.spring.di.ProcessorImplA" />
resource2.jar中的package 'com.test.rs' 也有一个 'jarAppcontext.xml' 文件,内容如下:
<bean id="ProcessorImplB" class="com.test.spring.di.ProcessorImplB" />
通过使用下面的代码则可以将两个jar包中的文件都加载进来
ApplicationContext ctx = new ClassPathXmlApplicationContext( "classpath*:com/test/rs/jarAppcontext.xml");
而如果写成下面的代码,就只能找到其中的一个xml文件(顺序取决于jar包的加载顺序)
ApplicationContext ctx = new ClassPathXmlApplicationContext( "classpath:com/test/rs/jarAppcontext.xml");
classpath*:的使用是为了多个component(最终发布成不同的jar包)并行开发,各自的bean定义文件按照一定的规则:package+filename,而使用这些component的调用者可以把这些文件都加载进来.
classpath*:的加载使用了classloader的 getResources() 方法,如果是在不同的J2EE服务器上运行,由于应用服务器提供自己的classloader实现,它们在处理jar文件时的行为也许会有所不同。 要测试classpath*: 是否有效,可以用classloader从classpath中的jar文件里加载文件来进行测试:getClass().getClassLoader().getResources("<someFileInsideTheJar>")。(上面的例子是在sun的jre中运行的状态)
从Spring的源码,在PathMatchingResourcePatternResolver类中,我们可以更清楚的了解其对的处理:如果是以classpath*开头,它会遍历classpath.
protected Resource[] findAllClassPathResources(String location) throws IOException { String path = location; if (path.startsWith("/")) { path = path.substring(1); } Enumeration resourceUrls = getClassLoader().getResources(path); Set<Resource> result = new LinkedHashSet<Resource>(16); while (resourceUrls.hasMoreElements()) { URL url = (URL) resourceUrls.nextElement(); result.add(convertClassLoaderURL(url)); } return result.toArray(new Resource[result.size()]); }
http://blog.csdn.net/kkdelta/article/details/5560210,简介了在JAVA里遍历classpath中读取找到的所有符合名称的文件.
另外在加载resource的时候,其他前缀的意义如下表所示:注意classpath*只能用与指定配置文件的路径,不能用在用于getResource的参数.如appContext.getResource("classpath*:conf/bfactoryCtx.xml")会异常的.
从Spring的源码可以看出原因:如果是classpath:开头,从classpath加载,否则尝试URL,如果失败,调用 getResourceByPath
public Resource getResource(String location) { Assert.notNull(location, "Location must not be null"); if (location.startsWith(CLASSPATH_URL_PREFIX)) { return new ClassPathResource(location.substring(CLASSPATH_URL_PREFIX.length()), getClassLoader()); } else { try { // Try to parse the location as a URL... URL url = new URL(location); return new UrlResource(url); } catch (MalformedURLException ex) { // No URL -> resolve as resource path. return getResourceByPath(location); } } }
getResourceByPath会被不同ApplicationContext 实现覆盖.
如 GenericWebApplicationContext覆盖为如下:
protected Resource getResourceByPath(String path) {
return new ServletContextResource(this.servletContext, path);
}
如 FileSystemXmlApplicationContext覆盖为如下:
protected Resource getResourceByPath(String path) { if (path != null && path.startsWith("/")) { path = path.substring(1); } return new FileSystemResource(path); }
最终从文件加载的时候仍然是JAVA中常见的读取文件的方法:
如ClassPathResource得到inputstream的方法是利用class loader.
public InputStream getInputStream() throws IOException { InputStream is; if (this.clazz != null) { is = this.clazz.getResourceAsStream(this.path); }
如FileSystemResource得到inputstream的方法是利用FileInputStream.
public InputStream getInputStream() throws IOException {
return new FileInputStream(this.file);
}
如ServletContextResource得到inputstream的方法是利用servletContext.getResourceAsStream.
public InputStream getInputStream() throws IOException { InputStream is = this.servletContext.getResourceAsStream(this.path); if (is == null) { throw new FileNotFoundException("Could not open " + getDescription()); } return is; }
发表评论
-
分享JAVA从程序员到架构师之路的各项资料
2016-06-25 15:46 386JAVA架构师视频资料,搭建高并发、高可用电商架构设计资料 ... -
Java线程面试题Top50
2016-02-17 09:47 814不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题。 ... -
XSD (xml Schema Definition
2014-12-22 16:33 736XSD (xml Schema Definition) ... -
在Web.xml中自动扫描Spring的配置文件及resource时classpath*:与classpath:的区别
2014-12-22 14:16 0首先在web.xml中配置监听器listener,让Sprin ... -
在Web.xml中自动扫描Spring的配置文件及resource时classpath*:与classpath:的区别
2014-12-22 14:15 0首先在web.xml中配置监听器listener,让Sprin ... -
转 JAVA读取外部资源的方法
2014-12-22 14:04 1772在java代码中经常有读取外部资源的要求:如配置文件等等,通常 ... -
oscache.properties文件配置
2014-05-28 13:22 9301、cache.memory 是否使用 ... -
oscache 使用总结
2014-05-28 13:21 608前阵子对公司网站进行了性能优化,其中,有一项就是使用OSCac ... -
华为JAVA编程规范
2014-04-18 11:14 1294Java 编程规范 排版 规 ... -
Spring声明式事务配置管理方法
2014-04-16 17:50 743环境配置 项目使用SSH架构,现在要添加Spring事务管理 ... -
Spring MVC和Struts2的比较
2014-04-16 17:29 653虽然说没有系统的学习 ... -
漂浮广告代码、漂浮代码分析(讲解)
2014-04-10 08:47 708总共有三个文件1.htm 主文件、liangbian.js 在 ... -
追MM与23种设计模式
2014-04-10 09:03 1294创建型模式 1、FACTORY— ... -
关于权限控制的讨论
2014-04-09 16:54 662在许多的实际应用中, ... -
转 对Spring IoC容器实现的结构分析
2014-04-09 16:39 647本文的目标: 从实现的角度来认识SpringIoC容器。 观 ... -
转 解决json转换hibernate 结果集对象
2014-04-09 16:28 817在使用ext+ssh框架过程 ... -
转:Spring事务配置的五种方式和spring里面事务的传播属性和事务隔离级别
2014-04-09 16:14 1370Spring事务配置的五种方式 前段时间对Spring的事务 ... -
Spring事务 7个传播行为,4个隔离级别
2014-04-09 16:13 702转载自:http://blog.chinaunix.net/u ... -
java创建实例的几种方法
2014-02-14 10:34 960从大体上分,有三种 1.使用new关键字 2.使用反射 3.序 ... -
基于java反射机制实现javabean转json字符串
2013-09-16 14:13 2535package com.ObjectToJson; impo ...
相关推荐
在Spring框架中,自动扫描(Auto-Component Discovery)是一种便捷的方式,它允许开发者无需显式配置每个bean,就能将类路径下(classpath)的特定包及其子包中的组件(即带有特定注解的类)纳入Spring容器进行管理...
最后,确保在开发过程中持续关注Spring框架的版本更新,因为不同版本的Spring在加载配置文件时的细节可能有所不同。随着技术的发展,Spring也在不断地改进其配置加载机制,了解最新的加载方式可以帮助开发者更有效地...
在Spring MVC项目中,加载jar包中的Spring配置文件是一个常见的需求,特别是在进行SSM(Spring、Spring MVC、MyBatis)整合时。SSM框架的整合通常涉及到多个配置文件的组织和管理,其中一部分配置可能会被打包到独立...
6. **资源处理**:在`applicationContext.xml`中可以配置资源加载,如`<context:resource location="classpath:database.properties"/>`来加载属性文件。 7. **国际化**:Spring支持多语言环境,通过`...
标题中的“Spring2.5 自动扫描classpath”指的是Spring框架在2.5版本中引入的一项功能,即自动组件扫描(Auto-Component Scanning)。这项功能允许开发者无需在XML配置文件中显式声明bean,而是通过在类上添加特定...
在Spring Boot应用中,我们通常使用YAML或properties文件来管理我们的配置,因为它们与Spring Boot的自动配置机制紧密集成。然而,在某些情况下,我们可能需要读取传统的`applicationContext.xml`配置文件,例如,当...
可能是Hibernate配置文件(如`hibernate.cfg.xml`)未被正确加载,或者是Spring配置文件中的某些配置有误。 **解决方法**: 1. **检查配置文件路径**: 确认Spring配置文件中关于`SessionFactory`的配置是否正确,如...
这里的 `<import>` 标签指定了外部配置文件的路径,这些文件将在解析主配置文件时被自动加载和合并。 #### 四、结论 在 Spring 框架中,通过合理地拆分和加载多个配置文件,不仅可以显著提升应用程序的可读性和可...
在企业级应用开发中,Apache CXF与Spring框架的结合被广泛采用,以实现高效、灵活的Web服务开发。本文将深入探讨CXF与Spring如何整合,以及如何在Tomcat环境下部署Web服务。 #### 一、CXF与Spring整合概述 **CXF**...
在实际开发中,你还需要确保XML配置中的bean与Spring Boot的自动配置不冲突,必要时可以使用`@Profile`或`@Conditional`注解来控制不同环境下的配置加载。 总结来说,Spring Boot虽然主要依赖Java和YAML配置,但...
- **原因**:这通常发生在Spring解析XML配置文件时遇到问题。 - **解决办法**: - 检查XML配置文件是否存在格式错误。 - 确认所有必需的依赖都已添加至项目中。 #### 11. 文件提前结束 - **原因**:XML文件未按...
- 在 `web.xml` 中添加 `ContextLoaderListener` 监听器,以便启动时加载 Spring 上下文。 - `contextConfigLocation` 参数指定 Spring 配置文件的位置,例如 `classpath:applicationContext.xml`。 4. **Spring ...
- **Classpath scanning and managed components**:讲解了如何自动检测类路径上的组件并将其纳入管理。 - **Using JSR 330 Standard Annotations**:介绍了如何使用JSR 330注解进行依赖注入。 - **Java-based ...
- **WildcardClassLoader**:通过通配符加载多个配置文件,如`classpath:applicationContext-*.xml`。 5. **依赖注入(Dependency Injection, DI)** DI是Spring的核心,它通过XML配置或注解方式来实现对象间的...
- 在Spring配置文件中配置事务拦截器。 ```xml <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="*" propagation="REQUIRED" /> </tx:attributes> ...
当使用logback作为日志框架时,通常我们会将配置文件放在`src/main/resources`目录下,命名为`logback-spring.xml`,这是因为Spring Boot默认支持`logback-spring.xml`,它能与Spring的自动配置机制集成。...
- **建立 Spring 的配置文件**:创建 `applicationContext.xml` 文件作为 Spring 的核心配置文件。 - **引入 Spring 的 jar 包**:添加 Spring 框架所需的依赖库到项目的 classpath 中。 - **编写测试代码**:...
**通过`import`标签引入其他配置文件**:在`spring-mvc.xml`中使用`<import resource="user_spring.xml"/>`引入其他配置文件。 2. **在`web.xml`中配置**:可以在`web.xml`中指定`contextConfigLocation`参数来...
在Spring框架中,资源文件是不可或缺的部分,它们用于配置、数据源、本地化以及其它功能。Spring作为一个强大的Java企业级应用开发框架,提供了一系列的工具和API来管理和处理各种资源。下面将详细介绍Spring中资源...