1.构建应用上下文

一个应用上下文构造器一般需要一个构成Bean定义的上下为你xml字符串路径或者一个字符串数组路径作为参数。

当这样的路径没有前缀的时候,那么从哪个路径构建的资源类型,用于加载bean的定义,取决于它所处的指定的上下文环境,例如,如果你像下面一样创建一个ClassPathXMLApplicationContext :

ApplicationContext ctx = new ClassPathXmlApplicationContext("conf/appContext.xml");

Bean定义将会从classpath中加载然后做完一个ClassPathResource来使用。但还如果你像下面这样创建改一个FileSystemXxmlApplicationContext:

ApplicationContext ctx =
new FileSystemXmlApplicationContext("conf/appContext.xml");

Bean定义将会从一个文件出被加载,在这个例子中将会从想对你的当前工作目录中查看。

注意在位置中中的明确的Classpath前缀或者标准的URL前缀将会覆盖缺省的创建用于加载定义的Resource类型。所以这个FileSystemXmlApplicationContext...

ApplicationContext ctx =
new FileSystemXmlApplicationContext("classpath:conf/appContext.xml");

它将会从classpath中加载bean定义。但是,这仍然是一个FileSystemXmlApplicationContext。如果它经常被当成一个ResourceLoader,那么任何不带前缀的路径将会被当成是文件路径。

1.1.构建ClassPathXmlApplicationContext-快捷方式

ClassPathXmlApplicationContext提供了大量的构造函数来提供实例化的操作。设计的基本做法就是一个提供包含xml文件名称的字符串数组,而一个铜是提供了一个类:ClassPathXmlApplicationContext从提供的类中发现路径的信息。

下面的例子将吧这个表述的很清晰。看下面的文件夹布局:

    com/
foo/
services.xml
daos.xml
MessengerService.class

ClassPathXmlApplicationContext实例有在servies.xml和daos.xml中定义的beans组成,可以向下面这样被实例化:

ApplicationContext ctx = new ClassPathXmlApplicationContext(
new String[] { "services.xml", "daos.xml"}, MessengerService. class);

2.在应用上下文构造函数中资源路径的通配符

在应用上下文构造函数的值中的资源路径可能是一个只是一对一映射到目标资源的简单的路径或者是包含特殊的“classpath*:”前缀或者的ANT风格的表达式。后者都是通配符的应用。

使用这种机制的场景之一就是当来处理组件风格的应用。所有的组件能够发布上下文定义的代码片段,而且当最终的应用上下文通过使用相同的路径前缀被创建的 时候,所有的组件片段能够自动的装配在一起。

注意到这个通配符是指定用在资源路径中的 ,而且在构建的时候被解析。它和Resource类型自身没有关系。不要使用前缀classpath*:来构建构建一个真正的资源,因为一个资源只会一次指向一个资源。

2.1 ANT风格的模式

当路径含有ANT风格模式的时候:

/WEB-INF/-context.xml
com/mycompany//applicationContext.xml
file:C:/some/path/-context.xml
classpath:com/mycompany//applicationContext.xml

解析器会根据这个复杂但是被定义的过程去解析通配符。它会根据上下的非通配符中获取一个Resource而且从一个URL获取。如果这个URL不是一个jar,URL或者容器指定的变体,然后一个java.io.File就会通过它获取而且通过文件系统来解析这个通配符。在一个Jar URL中,解析器会获取一个java.net.JarURLConnection或者可以手动解析这个Jar URL然后通过j意义上的可移植性

ar文件内容来解析通配符。

2.1.1意义上的可移植性

如果指定的路径已经是一个文件URL了,不管是隐式的还是现实的,因为基础的ResourceLoader是一个文件系统了,然后通配符就会保证工作在一个完全便携的风格中。

如果指定的路径是一个classpath位置,那么解析器就必须通过一个Classloader.getResource() 方法调用获取最后一个非通配符路径的URL片段。因为这个只是路径的一个,严格来说它是未定义的。在实践中,一般它是java.io.File来表示一个目录。一般在这个操作中还有移植行的考虑。

如果一个Jar URL 作为最后一个非通配符片段来获取,解析器必须能从这里面够获取一个java.net.JarURLConnection,或者手动解析这个Jar URL,一般能够读取Jar的内容并且解析通配符。这个在发布费的环境中会有效但是在一些中会出错,而且强烈建议通过通配符的方式从jar中获取资源需要在你你指定的环境中得到测试在你使用它之前。

2.2Classpath: classpath: 前缀

当构造一个基于XML的应用上下文的时候,一个特殊的classpath*:前缀:

ApplicationContext ctx =
new ClassPathXmlApplicationContext("classpath*:conf/appContext.xml");

这个特殊的前缀明确了所有classpath资源必须匹配给定的名字才会被获取然后组合在一起形成了最终的应用上下文的定义。

" classpath: "需要和一个PathMatcher模式联系在一起,例如 " classpath:META-INF/*-beans.xml"。在这个例子里,解决策略是想淡定简单:一个ClassLoader.getResources()调用在后面的非通配符片段中获取所有匹配的资源,然后应用相同的匹配策略对于子路径。

2.2.1关于通配符的其他说明

请注意 " classpath:"在和ANT风格的模式联系在一起的时候在模式开始之前只会在一个根目录出开始匹配,出发实际的目标文件在文件系统中。这意味着像“classpath

Spring Resource之应用上下文和资源路径的更多相关文章

  1. Spring Resource之作为依赖的资源

    如果一个bean自己能够通过一些动态的过程来决定和提供一些资源路径,那么通过ResourceLoader接口来加载资源会是更有效的.考虑作为一个例子的加载模板,需要的指定的资源取决于用户的角色.如果资 ...

  2. Spring Resource框架体系介绍

    Resource介绍 在使用spring作为容器进行项目开发中会有很多的配置文件,这些配置文件都是通过Spring的Resource接口来实现加载,但是,Resource对于所有低级资源的访问都不够充 ...

  3. Spring MVC程序中得到静态资源文件css,js,图片文件的路径问题总结

    上一篇 | 下一篇 Spring MVC程序中得到静态资源文件css,js,图片 文件的路径 问题总结 作者:轻舞肥羊 日期:2012-11-26 http://www.blogjava.net/fi ...

  4. 【spring】ApplicationListener传递参数到页面(解决静态+动态资源路径+静态文件的缓存控制)

    一.相对路径还是绝对路径的问题 前端页面加载资源或者请求的时候到底是使用相对路径还是绝对路径,想必大家都很清楚,用的是当然是相对路径,因为这样增加了项目的灵活性,不需要经常的改动.那既然是相对路径就需 ...

  5. 基础篇:JAVA资源之IO、字符编码、URL和Spring.Resource

    目录 1 JAVA.IO字节流 2 JAVA.IO字符流 3 乱码问题和字符流 4 字符集和字符编码的概念区分 5 URI概念的简单介绍 6 URL概念及与URL的区别 7 Spring.Resour ...

  6. Spring boot 默认静态资源路径与手动配置访问路径的方法

    这篇文章主要介绍了Spring boot 默认静态资源路径与手动配置访问路径的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下   在application.propertis中配置 ##端口号 ...

  7. spring security oauth2 jwt 认证和资源分离的配置文件(java类配置版)

    最近再学习spring security oauth2.下载了官方的例子sparklr2和tonr2进行学习.但是例子里包含的东西太多,不知道最简单最主要的配置有哪些.所以决定自己尝试搭建简单版本的例 ...

  8. Spring Boot使用Maven打包替换资源文件占位符

    在Spring Boot开发中,通过Maven构建项目依赖是一件比较舒心的事,可以为我们省去处理冲突等大部分问题,将更多的精力用于业务功能上.近期在项目中,由于项目集成了其他外部系统资源文件,需要根据 ...

  9. spring中获取当前项目的真实路径

    总结: 方法1: WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext ...

随机推荐

  1. mapxtreme演示V1.3

    mapxtreme演示V1.3   mapxtreme地图相关基本功能的演示其中包括 鹰眼地图,图层控制,发达,缩小,平移地图,地图模糊查询,中点工具,距离测量工具,面积测量工具,图元信息查看工具,各 ...

  2. DataGridView突出

    再看视频的时候,看到视频上面有对DataGrid中的数据进行高亮显示实现功能.当中涉及到一个事件,是DataGrid1_ItemDataBound. 实现的代码例如以下: b.IJ'I.脚e比ontr ...

  3. JAVA连接ACCESS、MYSQL、SQLSEVER、ORACLE数据库

    . 概要 1.1 JDBC概念 JDBC(Java Database Connectivity)是Java语言为了支持SQL功能而提供的与数据库连接的用户的接口.JDBC中包含了一组由(Java)语言 ...

  4. Java新手如何学习Spring、Struts、Hibernate三大框架?(转)

    整理知乎大牛答案: 1.入门看文档(blog,书籍等等),深入理解配置文件的含义(Spring.Struts.Hibernate); 2.遇到问题,自己动手解决,如果解决了,为什么这样解决?(凡事总问 ...

  5. win8 64位使用plsql developer连接oracle数据库问题

    问题:win8的64使用位系统plsql developer本地连接oracle莫名其妙的问题发生在数据库时.错误消息框,甚至可能是空的. 原因:它表示,互联网,的原因,预计在64位系统安装在64位O ...

  6. JS常用方法总结,及jquery异步调用后台方法实例

    //前台接收get参数值 function getQueryString(name) {            var queryStrings = window.location.search.sp ...

  7. 【高德API】如何利用MapKit开发全英文检索的iOS地图

    原文:[高德API]如何利用MapKit开发全英文检索的iOS地图 制作全英文地图的展示并不困难,但是要制作全英文的数据检索列表,全英文的信息窗口,你就没办法了吧.告诉你,我有妙招!使用iOS自带的M ...

  8. 你知道OneNote的OCR功能吗?office lens为其增大威力,中文也识别

    原文:[原创]你知道OneNote的OCR功能吗?office lens为其增大威力,中文也识别 OneNote提供了强大的从图片中取出文字的功能,大家只要装上了桌面版OneNote(本人用的2013 ...

  9. PHP+百度地图API+JAVASCRIPT实现GPS坐标与百度坐标转换的实例

    原文:PHP+百度地图API+JAVASCRIPT实现GPS坐标与百度坐标转换的实例 <!--小幅的坐标转换点位程序--> <!DOCTYPE html> <html&g ...

  10. Samza/KafkaAnalysizing

    Apache Samza is a distributed stream processing framework. It uses Apache Kafka for messaging, and A ...