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.xml 和 daos.xml 中 bean 所组成的 ClassPathXmlApplicationContext
,可以这样来初始化:
ApplicationContext ctx = new ClassPathXmlApplicationContext(
new String[] {"services.xml", "daos.xml"}, MessengerService.class);
欲要知道 ClassPathXmlApplicationContext
更多不同类型的构造器,请查阅 Javadocs 文档。