4.7.1 构造应用上下文

(某一特定)应用上下文的构造器通常可以使用字符串或字符串数组所指代的(多个)资源(如 xml 文件)来构造当前上下文。

当指定的位置路径没有带前缀时,那从指定位置路径创建的Resource 类型(用于后续加载 bean 定义),取决于所使用应用上下文。举个列子,如下所创建的 ClassPathXmlApplicationContext :

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

会从类路径加载 bean 的定义,因为所创建的 Resource 实例是ClassPathResource.但所创建的是FileSystemXmlApplicationContext 时,

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

则会从文件系统加载 bean 的定义,这种情况下,资源路径是相对工作目录而言的。

注意:若位置路径带有 classpath前缀或 URL前缀,会覆盖默认创建的用于加载 bean 定义的 Resource 类型,比如这种情况下的 FileSystemXmlApplicationContext

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

,实际是从类路径下加载了 bean 的定义。可是,这个上下文仍然是 FileSystemXmlApplicationContext,而不是 ClassPathXmlApplicationContext,在后续作为ResourceLoader 来使用时,不带前缀的路径仍然会从文件系统中加载。

构造 ClassPathXmlApplicationContext 实例 - 快捷方式

ClassPathXmlApplicationContext 提供了多个构造函数,以利于快捷创建 ClassPathXmlApplicationContext的实例。最好莫不过使用只包含多个 xml 文件名(不带路径信息)的字符串数组和一个 Class 参数的构造器,所省略路径信息 ClassPathXmlApplicationContext会从 Class 参数 获取:

下面的这个例子,可以让你对个构造器有比较清晰的认识。试想一个如下类似的目录结构:

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

services.xmldaos.xml 中 bean 所组成的 ClassPathXmlApplicationContext,可以这样来初始化:

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

欲要知道 ClassPathXmlApplicationContext 更多不同类型的构造器,请查阅 Javadocs 文档。

results matching ""

    No results matching ""